{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d2269470-6a29-4bd7-afdb-bc2621546385",
   "metadata": {},
   "outputs": [],
   "source": [
    "from glob import glob\n",
    "import pandas as pd\n",
    "from scipy.stats import spearmanr, fisher_exact\n",
    "from statsmodels.sandbox.stats.multicomp import multipletests\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "\n",
    "sns.set_context('talk')\n",
    "sns.set(rc={\"figure.dpi\":150, 'savefig.dpi':300})\n",
    "sns.set_style('whitegrid')\n",
    "\n",
    "def p_adjust(pvalues, method='fdr_bh'):\n",
    "    res = multipletests(pvalues, method=method)\n",
    "    return np.array(res[1], dtype=float)\n",
    "\n",
    "def measure_enrichment(sig_kos, modules, all_module_kos):\n",
    "    enrichment_rows = list()\n",
    "    for module, module_kos in modules.items():\n",
    "        in_in = len(sig_kos & module_kos)  # in module and in gene set\n",
    "        in_out = len(sig_kos - module_kos)  # in gene set and out of module\n",
    "        out_in = len(module_kos - sig_kos)  # in module and out of gene set\n",
    "        out_out = len(all_module_kos - module_kos - sig_kos)\n",
    "\n",
    "        odds_ratio, p_value = fisher_exact([[in_in, in_out],\n",
    "                                            [out_in, out_out]], alternative='greater')\n",
    "        enrichment_rows.append([module, len(module_kos), in_in, in_out, out_in, out_out, odds_ratio, p_value])\n",
    "    enrichment = pd.DataFrame(enrichment_rows, columns=['module', 'module_size', 'in_in', 'in_out', 'out_in', 'out_out', 'odds_ratio', 'p_value']).set_index('module').sort_values('p_value')\n",
    "    enrichment['p_adj'] = p_adjust(enrichment['p_value'])\n",
    "    return enrichment"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7891f896-fa3c-4821-bd9c-ae78e4da9feb",
   "metadata": {},
   "source": [
    "# Correlate titers with KOs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19de6768-51db-4a07-882b-fb3617db5e19",
   "metadata": {},
   "source": [
    "## Read in data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3cdd5870-2dfc-4ec4-a6fb-4db88e55d229",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SubmissionType</th>\n",
       "      <th>SampleNumber</th>\n",
       "      <th>SampleIDValidation</th>\n",
       "      <th>DiversigenCheckInSampleName</th>\n",
       "      <th>BoxLocation</th>\n",
       "      <th>SampleType</th>\n",
       "      <th>SampleSource</th>\n",
       "      <th>SequencingType</th>\n",
       "      <th>BabyN</th>\n",
       "      <th>BabyN_checked</th>\n",
       "      <th>...</th>\n",
       "      <th>PCV ST9V_mmNorm</th>\n",
       "      <th>PCV ST14_mmNorm</th>\n",
       "      <th>PCV ST18C_mmNorm</th>\n",
       "      <th>PCV ST19A_mmNorm</th>\n",
       "      <th>PCV ST19F_mmNorm</th>\n",
       "      <th>PCV ST23F_mmNorm</th>\n",
       "      <th>median_mmNorm</th>\n",
       "      <th>median_mmNorm_DTAPHib</th>\n",
       "      <th>median_mmNorm_PCV</th>\n",
       "      <th>VR_group</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SampleID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>103_V9</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>186</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 12, B1</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>103</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.277753</td>\n",
       "      <td>0.146465</td>\n",
       "      <td>0.086356</td>\n",
       "      <td>0.035467</td>\n",
       "      <td>0.057453</td>\n",
       "      <td>0.300910</td>\n",
       "      <td>0.190854</td>\n",
       "      <td>0.326317</td>\n",
       "      <td>0.146465</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103_S1</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>225</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 13, B4</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>103</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.277753</td>\n",
       "      <td>0.146465</td>\n",
       "      <td>0.086356</td>\n",
       "      <td>0.035467</td>\n",
       "      <td>0.057453</td>\n",
       "      <td>0.300910</td>\n",
       "      <td>0.190854</td>\n",
       "      <td>0.326317</td>\n",
       "      <td>0.146465</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>103_V10</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>241</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 13, E1</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>103</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.277753</td>\n",
       "      <td>0.146465</td>\n",
       "      <td>0.086356</td>\n",
       "      <td>0.035467</td>\n",
       "      <td>0.057453</td>\n",
       "      <td>0.300910</td>\n",
       "      <td>0.190854</td>\n",
       "      <td>0.326317</td>\n",
       "      <td>0.146465</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108_V2</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, A6</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>108</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.871843</td>\n",
       "      <td>0.366194</td>\n",
       "      <td>0.164958</td>\n",
       "      <td>0.041692</td>\n",
       "      <td>0.063590</td>\n",
       "      <td>0.371471</td>\n",
       "      <td>0.168430</td>\n",
       "      <td>0.172291</td>\n",
       "      <td>0.164958</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108_V3</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, A4</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>108</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.871843</td>\n",
       "      <td>0.366194</td>\n",
       "      <td>0.164958</td>\n",
       "      <td>0.041692</td>\n",
       "      <td>0.063590</td>\n",
       "      <td>0.371471</td>\n",
       "      <td>0.168430</td>\n",
       "      <td>0.172291</td>\n",
       "      <td>0.164958</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 72 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           SubmissionType  SampleNumber  SampleIDValidation  \\\n",
       "SampleID                                                      \n",
       "103_V9    Primary in Tube           186                 NaN   \n",
       "103_S1    Primary in Tube           225                 NaN   \n",
       "103_V10   Primary in Tube           241                 NaN   \n",
       "108_V2    Primary in Tube             6                 NaN   \n",
       "108_V3    Primary in Tube             4                 NaN   \n",
       "\n",
       "         DiversigenCheckInSampleName BoxLocation SampleType  SampleSource  \\\n",
       "SampleID                                                                    \n",
       "103_V9                           NaN  Box 12, B1      Stool  Human Infant   \n",
       "103_S1                           NaN  Box 13, B4      Stool  Human Infant   \n",
       "103_V10                          NaN  Box 13, E1      Stool  Human Infant   \n",
       "108_V2                           NaN   Box 7, A6      Stool  Human Infant   \n",
       "108_V3                           NaN   Box 7, A4      Stool  Human Infant   \n",
       "\n",
       "         SequencingType  BabyN  BabyN_checked  ... PCV ST9V_mmNorm  \\\n",
       "SampleID                                       ...                   \n",
       "103_V9            MetaG    103            NaN  ...        0.277753   \n",
       "103_S1            MetaG    103            NaN  ...        0.277753   \n",
       "103_V10           MetaG    103            NaN  ...        0.277753   \n",
       "108_V2            MetaG    108            NaN  ...        0.871843   \n",
       "108_V3            MetaG    108            NaN  ...        0.871843   \n",
       "\n",
       "          PCV ST14_mmNorm PCV ST18C_mmNorm  PCV ST19A_mmNorm PCV ST19F_mmNorm  \\\n",
       "SampleID                                                                        \n",
       "103_V9           0.146465         0.086356          0.035467         0.057453   \n",
       "103_S1           0.146465         0.086356          0.035467         0.057453   \n",
       "103_V10          0.146465         0.086356          0.035467         0.057453   \n",
       "108_V2           0.366194         0.164958          0.041692         0.063590   \n",
       "108_V3           0.366194         0.164958          0.041692         0.063590   \n",
       "\n",
       "         PCV ST23F_mmNorm  median_mmNorm median_mmNorm_DTAPHib  \\\n",
       "SampleID                                                         \n",
       "103_V9           0.300910       0.190854              0.326317   \n",
       "103_S1           0.300910       0.190854              0.326317   \n",
       "103_V10          0.300910       0.190854              0.326317   \n",
       "108_V2           0.371471       0.168430              0.172291   \n",
       "108_V3           0.371471       0.168430              0.172291   \n",
       "\n",
       "          median_mmNorm_PCV  VR_group  \n",
       "SampleID                               \n",
       "103_V9             0.146465       NVR  \n",
       "103_S1             0.146465       NVR  \n",
       "103_V10            0.146465       NVR  \n",
       "108_V2             0.164958       NVR  \n",
       "108_V3             0.164958       NVR  \n",
       "\n",
       "[5 rows x 72 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meta = pd.read_csv('../../data/metadata/stool/stool_metadata.csv', index_col='SampleID')\n",
    "meta = pd.concat([meta,\n",
    "                  pd.read_csv('../../data/metadata/stool/stool_abx_usage.csv', index_col='SampleID'),\n",
    "                  pd.read_csv('../../data/metadata/stool/stool_titers_yr2.csv', index_col='SampleID')],\n",
    "                 axis=1)\n",
    "meta = meta.query(\"`gt_2.5` == True\")\n",
    "meta['VR_group'] = meta['VR_group'].fillna('Not Measured')\n",
    "meta = meta.sort_values(['BabyN', 'age_at_collection'])\n",
    "meta = meta.loc[~pd.isna(meta['median_mmNorm'])]\n",
    "meta.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "79209a23-aaf8-4bdb-95d8-b7ba74e40ae1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(11048, 450)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>103_V9</th>\n",
       "      <th>103_S1</th>\n",
       "      <th>103_V10</th>\n",
       "      <th>108_V2</th>\n",
       "      <th>108_V3</th>\n",
       "      <th>108_V4</th>\n",
       "      <th>108_V5</th>\n",
       "      <th>108_V6</th>\n",
       "      <th>108_V7</th>\n",
       "      <th>108_S1</th>\n",
       "      <th>...</th>\n",
       "      <th>264_V5</th>\n",
       "      <th>264_S1</th>\n",
       "      <th>264_S1F</th>\n",
       "      <th>264_V7</th>\n",
       "      <th>264_S2</th>\n",
       "      <th>264_S2F</th>\n",
       "      <th>264_V9</th>\n",
       "      <th>264_V10</th>\n",
       "      <th>264_V11</th>\n",
       "      <th>264_V12</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K00001</th>\n",
       "      <td>0.000155</td>\n",
       "      <td>0.000265</td>\n",
       "      <td>2.091231e-04</td>\n",
       "      <td>0.000410</td>\n",
       "      <td>0.000490</td>\n",
       "      <td>0.000390</td>\n",
       "      <td>0.000390</td>\n",
       "      <td>0.000422</td>\n",
       "      <td>0.000464</td>\n",
       "      <td>0.000154</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000490</td>\n",
       "      <td>0.000668</td>\n",
       "      <td>0.000293</td>\n",
       "      <td>3.703148e-04</td>\n",
       "      <td>0.000635</td>\n",
       "      <td>7.914440e-04</td>\n",
       "      <td>3.764422e-04</td>\n",
       "      <td>0.000187</td>\n",
       "      <td>1.659096e-04</td>\n",
       "      <td>0.000143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00002</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000001</td>\n",
       "      <td>8.615558e-06</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.651716e-07</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.815525e-07</td>\n",
       "      <td>6.831982e-07</td>\n",
       "      <td>0.000016</td>\n",
       "      <td>1.020476e-05</td>\n",
       "      <td>0.000007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00003</th>\n",
       "      <td>0.000706</td>\n",
       "      <td>0.000335</td>\n",
       "      <td>8.537235e-04</td>\n",
       "      <td>0.001143</td>\n",
       "      <td>0.000789</td>\n",
       "      <td>0.000481</td>\n",
       "      <td>0.000460</td>\n",
       "      <td>0.000976</td>\n",
       "      <td>0.000710</td>\n",
       "      <td>0.000492</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000716</td>\n",
       "      <td>0.000970</td>\n",
       "      <td>0.000358</td>\n",
       "      <td>4.713999e-04</td>\n",
       "      <td>0.000889</td>\n",
       "      <td>9.913462e-04</td>\n",
       "      <td>5.342610e-04</td>\n",
       "      <td>0.000521</td>\n",
       "      <td>6.297325e-04</td>\n",
       "      <td>0.000501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00004</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>7.832326e-07</td>\n",
       "      <td>0.000007</td>\n",
       "      <td>0.000297</td>\n",
       "      <td>0.000065</td>\n",
       "      <td>0.000017</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000007</td>\n",
       "      <td>0.000055</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000030</td>\n",
       "      <td>0.000065</td>\n",
       "      <td>0.000014</td>\n",
       "      <td>1.090133e-05</td>\n",
       "      <td>0.000007</td>\n",
       "      <td>4.645616e-06</td>\n",
       "      <td>3.415991e-07</td>\n",
       "      <td>0.000002</td>\n",
       "      <td>3.291858e-07</td>\n",
       "      <td>0.000006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00005</th>\n",
       "      <td>0.000155</td>\n",
       "      <td>0.000083</td>\n",
       "      <td>3.164260e-04</td>\n",
       "      <td>0.000026</td>\n",
       "      <td>0.000415</td>\n",
       "      <td>0.000246</td>\n",
       "      <td>0.000448</td>\n",
       "      <td>0.000311</td>\n",
       "      <td>0.000525</td>\n",
       "      <td>0.000336</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000167</td>\n",
       "      <td>0.000137</td>\n",
       "      <td>0.000366</td>\n",
       "      <td>2.578329e-04</td>\n",
       "      <td>0.000123</td>\n",
       "      <td>1.144511e-04</td>\n",
       "      <td>7.890940e-05</td>\n",
       "      <td>0.000201</td>\n",
       "      <td>2.011325e-04</td>\n",
       "      <td>0.000209</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 450 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          103_V9    103_S1       103_V10    108_V2    108_V3    108_V4  \\\n",
       "K00001  0.000155  0.000265  2.091231e-04  0.000410  0.000490  0.000390   \n",
       "K00002  0.000000  0.000001  8.615558e-06  0.000000  0.000000  0.000000   \n",
       "K00003  0.000706  0.000335  8.537235e-04  0.001143  0.000789  0.000481   \n",
       "K00004  0.000000  0.000000  7.832326e-07  0.000007  0.000297  0.000065   \n",
       "K00005  0.000155  0.000083  3.164260e-04  0.000026  0.000415  0.000246   \n",
       "\n",
       "          108_V5    108_V6    108_V7    108_S1  ...    264_V5    264_S1  \\\n",
       "K00001  0.000390  0.000422  0.000464  0.000154  ...  0.000490  0.000668   \n",
       "K00002  0.000000  0.000000  0.000000  0.000000  ...  0.000000  0.000000   \n",
       "K00003  0.000460  0.000976  0.000710  0.000492  ...  0.000716  0.000970   \n",
       "K00004  0.000017  0.000000  0.000007  0.000055  ...  0.000030  0.000065   \n",
       "K00005  0.000448  0.000311  0.000525  0.000336  ...  0.000167  0.000137   \n",
       "\n",
       "         264_S1F        264_V7    264_S2       264_S2F        264_V9  \\\n",
       "K00001  0.000293  3.703148e-04  0.000635  7.914440e-04  3.764422e-04   \n",
       "K00002  0.000000  1.651716e-07  0.000000  2.815525e-07  6.831982e-07   \n",
       "K00003  0.000358  4.713999e-04  0.000889  9.913462e-04  5.342610e-04   \n",
       "K00004  0.000014  1.090133e-05  0.000007  4.645616e-06  3.415991e-07   \n",
       "K00005  0.000366  2.578329e-04  0.000123  1.144511e-04  7.890940e-05   \n",
       "\n",
       "         264_V10       264_V11   264_V12  \n",
       "K00001  0.000187  1.659096e-04  0.000143  \n",
       "K00002  0.000016  1.020476e-05  0.000007  \n",
       "K00003  0.000521  6.297325e-04  0.000501  \n",
       "K00004  0.000002  3.291858e-07  0.000006  \n",
       "K00005  0.000201  2.011325e-04  0.000209  \n",
       "\n",
       "[5 rows x 450 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ko_abunds = pd.read_csv('../../data/stool/ko_abundance_table.rel.tsv', sep='\\t', index_col=0)\n",
    "ko_abunds.index = [i.replace(\"'\", \"_\").replace('#', '_') for i in ko_abunds.index]\n",
    "ko_abunds.columns = [i.split('.txt')[0] for i in ko_abunds.columns]\n",
    "ko_abunds = ko_abunds[meta.index]\n",
    "print(ko_abunds.shape)\n",
    "display(ko_abunds.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2ec211de-fa3f-472d-a373-f754c745562c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(450, 72)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/6t/1w2t3qmd1rx81mfw9sq_tfpr0000gn/T/ipykernel_12921/2340599432.py:2: FutureWarning: Passing a set as an indexer is deprecated and will raise in a future version. Use a list instead.\n",
      "  meta_matched = meta.loc[in_both]\n"
     ]
    }
   ],
   "source": [
    "in_both = set(meta.index) & set(ko_abunds.columns)\n",
    "meta_matched = meta.loc[in_both]\n",
    "print(meta_matched.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e7300a20-03ca-4941-9ed6-7e1b851f97e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "meta_v5 = meta_matched.query(\"VisitCode == 'V5'\")\n",
    "meta_v6 = meta_matched.query(\"VisitCode == 'V6'\")\n",
    "meta_v7 = meta_matched.query(\"VisitCode == 'V7'\")\n",
    "meta_v9 = meta_matched.query(\"VisitCode == 'V9'\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f6a413ed-371e-4d1e-8ade-071dc4e10cf8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SubmissionType</th>\n",
       "      <th>SampleNumber</th>\n",
       "      <th>SampleIDValidation</th>\n",
       "      <th>DiversigenCheckInSampleName</th>\n",
       "      <th>BoxLocation</th>\n",
       "      <th>SampleType</th>\n",
       "      <th>SampleSource</th>\n",
       "      <th>SequencingType</th>\n",
       "      <th>BabyN</th>\n",
       "      <th>BabyN_checked</th>\n",
       "      <th>...</th>\n",
       "      <th>PCV ST9V_mmNorm</th>\n",
       "      <th>PCV ST14_mmNorm</th>\n",
       "      <th>PCV ST18C_mmNorm</th>\n",
       "      <th>PCV ST19A_mmNorm</th>\n",
       "      <th>PCV ST19F_mmNorm</th>\n",
       "      <th>PCV ST23F_mmNorm</th>\n",
       "      <th>median_mmNorm</th>\n",
       "      <th>median_mmNorm_DTAPHib</th>\n",
       "      <th>median_mmNorm_PCV</th>\n",
       "      <th>VR_group</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SampleID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>227_S2F</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>670</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box21</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>227</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.271781</td>\n",
       "      <td>0.127501</td>\n",
       "      <td>0.118065</td>\n",
       "      <td>0.053218</td>\n",
       "      <td>0.024696</td>\n",
       "      <td>0.307310</td>\n",
       "      <td>0.105356</td>\n",
       "      <td>0.038992</td>\n",
       "      <td>0.118065</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209_V5</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>29</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, E5</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>209</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.089643</td>\n",
       "      <td>0.282573</td>\n",
       "      <td>0.075616</td>\n",
       "      <td>0.024911</td>\n",
       "      <td>0.012167</td>\n",
       "      <td>0.068419</td>\n",
       "      <td>0.053628</td>\n",
       "      <td>0.035388</td>\n",
       "      <td>0.075616</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>226_AF1</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>109</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 10, A1</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>226</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.162001</td>\n",
       "      <td>0.082202</td>\n",
       "      <td>0.016803</td>\n",
       "      <td>0.043288</td>\n",
       "      <td>0.012579</td>\n",
       "      <td>0.103734</td>\n",
       "      <td>0.074301</td>\n",
       "      <td>0.097174</td>\n",
       "      <td>0.057712</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>130_V7</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>487</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box12</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>130</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.628508</td>\n",
       "      <td>0.128899</td>\n",
       "      <td>0.092901</td>\n",
       "      <td>0.052755</td>\n",
       "      <td>0.021899</td>\n",
       "      <td>0.073206</td>\n",
       "      <td>0.092901</td>\n",
       "      <td>0.043521</td>\n",
       "      <td>0.118330</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>227_V7</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>168</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 11, E1</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>227</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.271781</td>\n",
       "      <td>0.127501</td>\n",
       "      <td>0.118065</td>\n",
       "      <td>0.053218</td>\n",
       "      <td>0.024696</td>\n",
       "      <td>0.307310</td>\n",
       "      <td>0.105356</td>\n",
       "      <td>0.038992</td>\n",
       "      <td>0.118065</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 72 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           SubmissionType  SampleNumber  SampleIDValidation  \\\n",
       "SampleID                                                      \n",
       "227_S2F   Primary in Tube           670                 NaN   \n",
       "209_V5    Primary in Tube            29                 NaN   \n",
       "226_AF1   Primary in Tube           109                 NaN   \n",
       "130_V7    Primary in Tube           487                 NaN   \n",
       "227_V7    Primary in Tube           168                 NaN   \n",
       "\n",
       "         DiversigenCheckInSampleName BoxLocation SampleType  SampleSource  \\\n",
       "SampleID                                                                    \n",
       "227_S2F                          NaN       Box21      Stool  Human Infant   \n",
       "209_V5                           NaN   Box 7, E5      Stool  Human Infant   \n",
       "226_AF1                          NaN  Box 10, A1      Stool  Human Infant   \n",
       "130_V7                           NaN       Box12      Stool  Human Infant   \n",
       "227_V7                           NaN  Box 11, E1      Stool  Human Infant   \n",
       "\n",
       "         SequencingType  BabyN  BabyN_checked  ... PCV ST9V_mmNorm  \\\n",
       "SampleID                                       ...                   \n",
       "227_S2F           MetaG    227            NaN  ...        0.271781   \n",
       "209_V5            MetaG    209            NaN  ...        0.089643   \n",
       "226_AF1           MetaG    226            NaN  ...        0.162001   \n",
       "130_V7            MetaG    130            NaN  ...        0.628508   \n",
       "227_V7            MetaG    227            NaN  ...        0.271781   \n",
       "\n",
       "          PCV ST14_mmNorm PCV ST18C_mmNorm  PCV ST19A_mmNorm PCV ST19F_mmNorm  \\\n",
       "SampleID                                                                        \n",
       "227_S2F          0.127501         0.118065          0.053218         0.024696   \n",
       "209_V5           0.282573         0.075616          0.024911         0.012167   \n",
       "226_AF1          0.082202         0.016803          0.043288         0.012579   \n",
       "130_V7           0.128899         0.092901          0.052755         0.021899   \n",
       "227_V7           0.127501         0.118065          0.053218         0.024696   \n",
       "\n",
       "         PCV ST23F_mmNorm  median_mmNorm median_mmNorm_DTAPHib  \\\n",
       "SampleID                                                         \n",
       "227_S2F          0.307310       0.105356              0.038992   \n",
       "209_V5           0.068419       0.053628              0.035388   \n",
       "226_AF1          0.103734       0.074301              0.097174   \n",
       "130_V7           0.073206       0.092901              0.043521   \n",
       "227_V7           0.307310       0.105356              0.038992   \n",
       "\n",
       "          median_mmNorm_PCV  VR_group  \n",
       "SampleID                               \n",
       "227_S2F            0.118065       NVR  \n",
       "209_V5             0.075616       NVR  \n",
       "226_AF1            0.057712       NVR  \n",
       "130_V7             0.118330       NVR  \n",
       "227_V7             0.118065       NVR  \n",
       "\n",
       "[5 rows x 72 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meta_PCV = meta_matched.loc[~pd.isna(meta_matched['median_mmNorm_PCV'])]\n",
    "meta_PCV.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "033d15a4-e7ca-4335-b6fc-116de0d44bf2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2208\n"
     ]
    }
   ],
   "source": [
    "# The KEGG module file is not in the git repo, future users will need to find a copy of this file somewhere\n",
    "modules = {line.strip().split()[0]: set(line.strip().split()[1:]) for line in open('../../../../KEGG.20210320/module_kos.tsv')}\n",
    "modules = {key: value for key, value in modules.items() if len(value) >= 5}\n",
    "all_module_kos = {ko for module, kos in modules.items() for ko in kos}\n",
    "print(len(all_module_kos))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5d2b8c1a-899e-4d80-b1fb-d2c541b9f796",
   "metadata": {},
   "source": [
    "## KO correlations\n",
    "\n",
    "### 2 months"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "ac47252b-b54b-4ac0-b35e-de65db353143",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4368, 32)\n"
     ]
    }
   ],
   "source": [
    "ko_abunds_v5 = ko_abunds[meta_v5.index]\n",
    "ko_abunds_v5 = ko_abunds_v5.loc[(ko_abunds_v5 > 0).sum(axis=1) > ko_abunds_v5.shape[1]*.2]\n",
    "ko_abunds_v5 = ko_abunds_v5.loc[ko_abunds_v5.var(axis=1) > 1e-10] # variance filter\n",
    "print(ko_abunds_v5.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "29d671ff-a0ed-48f1-a0fe-60efdec4cb09",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K07464</th>\n",
       "      <td>0.560779</td>\n",
       "      <td>0.000842</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K19118</th>\n",
       "      <td>0.485495</td>\n",
       "      <td>0.004852</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K07334</th>\n",
       "      <td>0.466135</td>\n",
       "      <td>0.007167</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K19119</th>\n",
       "      <td>0.448665</td>\n",
       "      <td>0.010006</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K06994</th>\n",
       "      <td>-0.436651</td>\n",
       "      <td>0.012467</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K07464  0.560779  0.000842  0.962053\n",
       "K19118  0.485495  0.004852  0.962053\n",
       "K07334  0.466135  0.007167  0.962053\n",
       "K19119  0.448665  0.010006  0.962053\n",
       "K06994 -0.436651  0.012467  0.962053"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_correlations = ko_abunds_v5.transpose().apply(spearmanr, b=meta_v5['median_mmNorm']).transpose()\n",
    "v5_correlations.columns = ['rho', 'p_value']\n",
    "v5_correlations['p_adj'] = p_adjust(v5_correlations['p_value'])\n",
    "v5_correlations = v5_correlations.sort_values('p_value')\n",
    "v5_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "9200aaa3-4f03-4d6a-81da-8a781289659a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "41\n"
     ]
    }
   ],
   "source": [
    "print(len(v5_correlations.query('p_value < .05')))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07dcdd8a-a37e-4c4f-94fe-bb58c26e2e53",
   "metadata": {},
   "source": [
    "When we do these correlations we get no significant after FDR correction. There is strong significance in the raw p-values though with 278 unadjusted p-values < .05. To take advantage of this result we will run a module enrichment test to look for enrichment of KEGG modules."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "1bf5e139-b5fd-4012-a608-14dbc77eb5cd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00545</th>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>39</td>\n",
       "      <td>9</td>\n",
       "      <td>2194</td>\n",
       "      <td>12.501425</td>\n",
       "      <td>0.016143</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00346</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>40</td>\n",
       "      <td>9</td>\n",
       "      <td>2194</td>\n",
       "      <td>6.094444</td>\n",
       "      <td>0.168707</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00122</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>40</td>\n",
       "      <td>9</td>\n",
       "      <td>2194</td>\n",
       "      <td>6.094444</td>\n",
       "      <td>0.168707</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00002</th>\n",
       "      <td>12</td>\n",
       "      <td>1</td>\n",
       "      <td>40</td>\n",
       "      <td>11</td>\n",
       "      <td>2192</td>\n",
       "      <td>4.981818</td>\n",
       "      <td>0.198947</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00307</th>\n",
       "      <td>12</td>\n",
       "      <td>1</td>\n",
       "      <td>40</td>\n",
       "      <td>11</td>\n",
       "      <td>2192</td>\n",
       "      <td>4.981818</td>\n",
       "      <td>0.198947</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00545           11      2      39       9     2194   12.501425  0.016143   \n",
       "M00346           10      1      40       9     2194    6.094444  0.168707   \n",
       "M00122           10      1      40       9     2194    6.094444  0.168707   \n",
       "M00002           12      1      40      11     2192    4.981818  0.198947   \n",
       "M00307           12      1      40      11     2192    4.981818  0.198947   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00545    1.0  \n",
       "M00346    1.0  \n",
       "M00122    1.0  \n",
       "M00002    1.0  \n",
       "M00307    1.0  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_sig_kos = set(v5_correlations.query('p_value < .05').index)\n",
    "v5_enrichment = measure_enrichment(v5_sig_kos, modules, all_module_kos)\n",
    "# v5_enrichment.to_csv('../../../data/stool_metag/ko_correlation_enrichment_V5.tsv', sep='\\t')\n",
    "v5_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9be9bc4d-ecc9-4e2a-846a-f2243caaf879",
   "metadata": {},
   "source": [
    "When we do this we find 3 modules which are significantly enriched. M00060 and M00866 are the same but with 1 KO added for 866."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c80b6330-880d-4588-bb78-e0141ad0e8a4",
   "metadata": {},
   "source": [
    "#### Dig into modules"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "9358f7ca-cf11-42aa-9894-67f353757780",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/6t/1w2t3qmd1rx81mfw9sq_tfpr0000gn/T/ipykernel_12921/3075512320.py:1: FutureWarning: Passing a set as an indexer is deprecated and will raise in a future version. Use a list instead.\n",
      "  v5_correlations.loc[set(v5_correlations.index) & modules['M00060']].sort_values('p_value')\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K09949</th>\n",
       "      <td>0.202444</td>\n",
       "      <td>0.266487</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00912</th>\n",
       "      <td>0.183284</td>\n",
       "      <td>0.315330</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02536</th>\n",
       "      <td>0.159824</td>\n",
       "      <td>0.382245</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00677</th>\n",
       "      <td>0.148460</td>\n",
       "      <td>0.417415</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02517</th>\n",
       "      <td>0.120235</td>\n",
       "      <td>0.512163</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02560</th>\n",
       "      <td>-0.093842</td>\n",
       "      <td>0.609451</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K03269</th>\n",
       "      <td>0.087977</td>\n",
       "      <td>0.632081</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00748</th>\n",
       "      <td>0.082845</td>\n",
       "      <td>0.652155</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02535</th>\n",
       "      <td>-0.055352</td>\n",
       "      <td>0.763498</td>\n",
       "      <td>0.963258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02527</th>\n",
       "      <td>0.043255</td>\n",
       "      <td>0.814160</td>\n",
       "      <td>0.964279</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K09949  0.202444  0.266487  0.962053\n",
       "K00912  0.183284  0.315330  0.962053\n",
       "K02536  0.159824  0.382245  0.962053\n",
       "K00677  0.148460  0.417415  0.962053\n",
       "K02517  0.120235  0.512163  0.962053\n",
       "K02560 -0.093842  0.609451  0.962053\n",
       "K03269  0.087977  0.632081  0.962053\n",
       "K00748  0.082845  0.652155  0.962053\n",
       "K02535 -0.055352  0.763498  0.963258\n",
       "K02527  0.043255  0.814160  0.964279"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_correlations.loc[set(v5_correlations.index) & modules['M00060']].sort_values('p_value')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0db6e510-7c04-4555-b3b5-7b6f633b3b5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/6t/1w2t3qmd1rx81mfw9sq_tfpr0000gn/T/ipykernel_12921/136881632.py:1: FutureWarning: Passing a set as an indexer is deprecated and will raise in a future version. Use a list instead.\n",
      "  v5_correlations.loc[set(v5_correlations.index) & modules['M00144']].sort_values('p_value')\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K00338</th>\n",
       "      <td>0.182918</td>\n",
       "      <td>0.316315</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00340</th>\n",
       "      <td>0.166056</td>\n",
       "      <td>0.363715</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00337</th>\n",
       "      <td>0.163123</td>\n",
       "      <td>0.372368</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00342</th>\n",
       "      <td>0.155792</td>\n",
       "      <td>0.394522</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00335</th>\n",
       "      <td>-0.138930</td>\n",
       "      <td>0.448256</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K13378</th>\n",
       "      <td>0.126100</td>\n",
       "      <td>0.491642</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00334</th>\n",
       "      <td>-0.121334</td>\n",
       "      <td>0.508283</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00330</th>\n",
       "      <td>0.116202</td>\n",
       "      <td>0.526513</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00339</th>\n",
       "      <td>0.112170</td>\n",
       "      <td>0.541055</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00341</th>\n",
       "      <td>0.108504</td>\n",
       "      <td>0.554438</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00331</th>\n",
       "      <td>0.077713</td>\n",
       "      <td>0.672471</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00343</th>\n",
       "      <td>0.070748</td>\n",
       "      <td>0.700408</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00336</th>\n",
       "      <td>-0.050953</td>\n",
       "      <td>0.781821</td>\n",
       "      <td>0.963551</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K00338  0.182918  0.316315  0.962053\n",
       "K00340  0.166056  0.363715  0.962053\n",
       "K00337  0.163123  0.372368  0.962053\n",
       "K00342  0.155792  0.394522  0.962053\n",
       "K00335 -0.138930  0.448256  0.962053\n",
       "K13378  0.126100  0.491642  0.962053\n",
       "K00334 -0.121334  0.508283  0.962053\n",
       "K00330  0.116202  0.526513  0.962053\n",
       "K00339  0.112170  0.541055  0.962053\n",
       "K00341  0.108504  0.554438  0.962053\n",
       "K00331  0.077713  0.672471  0.962053\n",
       "K00343  0.070748  0.700408  0.962053\n",
       "K00336 -0.050953  0.781821  0.963551"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_correlations.loc[set(v5_correlations.index) & modules['M00144']].sort_values('p_value')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "84247857-451d-4472-b4a7-4896fe7ab09a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/6t/1w2t3qmd1rx81mfw9sq_tfpr0000gn/T/ipykernel_12921/872333751.py:1: FutureWarning: Passing a set as an indexer is deprecated and will raise in a future version. Use a list instead.\n",
      "  v5_correlations.loc[set(v5_correlations.index) & modules['M00866']].sort_values('p_value')\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K09949</th>\n",
       "      <td>0.202444</td>\n",
       "      <td>0.266487</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00912</th>\n",
       "      <td>0.183284</td>\n",
       "      <td>0.315330</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K16363</th>\n",
       "      <td>0.169928</td>\n",
       "      <td>0.352475</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02536</th>\n",
       "      <td>0.159824</td>\n",
       "      <td>0.382245</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00677</th>\n",
       "      <td>0.148460</td>\n",
       "      <td>0.417415</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02517</th>\n",
       "      <td>0.120235</td>\n",
       "      <td>0.512163</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K03269</th>\n",
       "      <td>0.087977</td>\n",
       "      <td>0.632081</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00748</th>\n",
       "      <td>0.082845</td>\n",
       "      <td>0.652155</td>\n",
       "      <td>0.962053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02535</th>\n",
       "      <td>-0.055352</td>\n",
       "      <td>0.763498</td>\n",
       "      <td>0.963258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02527</th>\n",
       "      <td>0.043255</td>\n",
       "      <td>0.814160</td>\n",
       "      <td>0.964279</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K09949  0.202444  0.266487  0.962053\n",
       "K00912  0.183284  0.315330  0.962053\n",
       "K16363  0.169928  0.352475  0.962053\n",
       "K02536  0.159824  0.382245  0.962053\n",
       "K00677  0.148460  0.417415  0.962053\n",
       "K02517  0.120235  0.512163  0.962053\n",
       "K03269  0.087977  0.632081  0.962053\n",
       "K00748  0.082845  0.652155  0.962053\n",
       "K02535 -0.055352  0.763498  0.963258\n",
       "K02527  0.043255  0.814160  0.964279"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_correlations.loc[set(v5_correlations.index) & modules['M00866']].sort_values('p_value')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3ec6687-2af8-44d0-a538-fdfc7d5cc9f2",
   "metadata": {},
   "source": [
    "LPS, LPS and oxidative phosphorlyation? Is this hope?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0608220-b032-4551-a312-4c30bd729226",
   "metadata": {},
   "source": [
    "### 4 months"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2c46b104-5035-42ea-9c7a-a14cad62805c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4384, 34)\n"
     ]
    }
   ],
   "source": [
    "ko_abunds_v6 = ko_abunds[meta_v6.index]\n",
    "ko_abunds_v6 = ko_abunds_v6.loc[(ko_abunds_v6 > 0).sum(axis=1) > ko_abunds_v6.shape[1]*.2]\n",
    "ko_abunds_v6 = ko_abunds_v6.loc[ko_abunds_v6.var(axis=1) > 1e-10] # variance filter\n",
    "print(ko_abunds_v6.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "0f6db620-22e5-499e-98e2-86bd62f37a1a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K02536</th>\n",
       "      <td>-0.567609</td>\n",
       "      <td>0.000463</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K07493</th>\n",
       "      <td>-0.474465</td>\n",
       "      <td>0.004582</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K12994</th>\n",
       "      <td>-0.462484</td>\n",
       "      <td>0.005888</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K18827</th>\n",
       "      <td>-0.419464</td>\n",
       "      <td>0.013531</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01130</th>\n",
       "      <td>-0.414209</td>\n",
       "      <td>0.014875</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K02536 -0.567609  0.000463  0.999316\n",
       "K07493 -0.474465  0.004582  0.999316\n",
       "K12994 -0.462484  0.005888  0.999316\n",
       "K18827 -0.419464  0.013531  0.999316\n",
       "K01130 -0.414209  0.014875  0.999316"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v6_correlations = ko_abunds_v6.transpose().apply(spearmanr, b=meta_v6['median_mmNorm']).transpose()\n",
    "v6_correlations.columns = ['rho', 'p_value']\n",
    "v6_correlations['p_adj'] = p_adjust(v6_correlations['p_value'])\n",
    "v6_correlations = v6_correlations.sort_values('p_value')\n",
    "v6_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "6e9a9b8f-7609-41ef-bad4-1e55d42dec59",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "43\n"
     ]
    }
   ],
   "source": [
    "print(len(v6_correlations.query('p_value < .05')))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "276a4a87-ccbf-421a-a190-4983deedd88e",
   "metadata": {},
   "source": [
    "Many fewer significant results than at 2 months but we will still look for enrichment."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bdae7e95-7a23-4196-98d5-a5fab527253e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00573</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>41</td>\n",
       "      <td>3</td>\n",
       "      <td>2198</td>\n",
       "      <td>35.739837</td>\n",
       "      <td>0.003459</td>\n",
       "      <td>0.519325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00123</th>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>41</td>\n",
       "      <td>4</td>\n",
       "      <td>2197</td>\n",
       "      <td>26.792683</td>\n",
       "      <td>0.005125</td>\n",
       "      <td>0.519325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00577</th>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>41</td>\n",
       "      <td>4</td>\n",
       "      <td>2197</td>\n",
       "      <td>26.792683</td>\n",
       "      <td>0.005125</td>\n",
       "      <td>0.519325</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00061</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>42</td>\n",
       "      <td>6</td>\n",
       "      <td>2195</td>\n",
       "      <td>8.710317</td>\n",
       "      <td>0.126826</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00631</th>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>42</td>\n",
       "      <td>7</td>\n",
       "      <td>2194</td>\n",
       "      <td>7.462585</td>\n",
       "      <td>0.143610</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00573            5      2      41       3     2198   35.739837  0.003459   \n",
       "M00123            6      2      41       4     2197   26.792683  0.005125   \n",
       "M00577            6      2      41       4     2197   26.792683  0.005125   \n",
       "M00061            7      1      42       6     2195    8.710317  0.126826   \n",
       "M00631            8      1      42       7     2194    7.462585  0.143610   \n",
       "\n",
       "           p_adj  \n",
       "module            \n",
       "M00573  0.519325  \n",
       "M00123  0.519325  \n",
       "M00577  0.519325  \n",
       "M00061  1.000000  \n",
       "M00631  1.000000  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v6_sig_kos = set(v6_correlations.query('p_value < .05').index)\n",
    "v6_enrichment = measure_enrichment(v6_sig_kos, modules, all_module_kos)\n",
    "v6_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "883f352a-6042-4e6d-8659-e77b1fe63757",
   "metadata": {},
   "source": [
    "We find nothing though."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66a0950e-aa69-4e2d-b69c-766d160f52ab",
   "metadata": {},
   "source": [
    "### 6 months"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "b305de69-3eb5-4aa6-b67e-bf98d8be74a1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4260, 38)\n"
     ]
    }
   ],
   "source": [
    "ko_abunds_v7 = ko_abunds[meta_v7.index]\n",
    "ko_abunds_v7 = ko_abunds_v7.loc[(ko_abunds_v7 > 0).sum(axis=1) > ko_abunds_v7.shape[1]*.2]\n",
    "ko_abunds_v7 = ko_abunds_v7.loc[ko_abunds_v7.var(axis=1) > 1e-10] # variance filter\n",
    "print(ko_abunds_v7.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "de490f0e-9c64-4836-97cf-873bfc92e743",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K21583</th>\n",
       "      <td>0.495662</td>\n",
       "      <td>0.001554</td>\n",
       "      <td>0.99851</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K03738</th>\n",
       "      <td>0.473492</td>\n",
       "      <td>0.002677</td>\n",
       "      <td>0.99851</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K18986</th>\n",
       "      <td>0.473323</td>\n",
       "      <td>0.002688</td>\n",
       "      <td>0.99851</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K16907</th>\n",
       "      <td>0.469744</td>\n",
       "      <td>0.002925</td>\n",
       "      <td>0.99851</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02652</th>\n",
       "      <td>0.445235</td>\n",
       "      <td>0.005093</td>\n",
       "      <td>0.99851</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value    p_adj\n",
       "K21583  0.495662  0.001554  0.99851\n",
       "K03738  0.473492  0.002677  0.99851\n",
       "K18986  0.473323  0.002688  0.99851\n",
       "K16907  0.469744  0.002925  0.99851\n",
       "K02652  0.445235  0.005093  0.99851"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v7_correlations = ko_abunds_v7.transpose().apply(spearmanr, b=meta_v7['median_mmNorm']).transpose()\n",
    "v7_correlations.columns = ['rho', 'p_value']\n",
    "v7_correlations['p_adj'] = p_adjust(v7_correlations['p_value'])\n",
    "v7_correlations = v7_correlations.sort_values('p_value')\n",
    "v7_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "8318e18d-2169-4674-95dc-6fb16507743f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "42\n"
     ]
    }
   ],
   "source": [
    "print(len(v7_correlations.query('p_value < .05')))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f37af16-866f-4bd6-a7aa-8fe1124743c8",
   "metadata": {},
   "source": [
    "Many fewer significant results than at 2 months but we will still look for enrichment."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "6034c751-ffbd-40d3-b1f2-49b161414f20",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00552</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>4</td>\n",
       "      <td>2201</td>\n",
       "      <td>13.420732</td>\n",
       "      <td>0.090106</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00308</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>6</td>\n",
       "      <td>2199</td>\n",
       "      <td>8.939024</td>\n",
       "      <td>0.123885</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00166</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>6</td>\n",
       "      <td>2199</td>\n",
       "      <td>8.939024</td>\n",
       "      <td>0.123885</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00309</th>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>7</td>\n",
       "      <td>2198</td>\n",
       "      <td>7.658537</td>\n",
       "      <td>0.140312</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00002</th>\n",
       "      <td>12</td>\n",
       "      <td>1</td>\n",
       "      <td>41</td>\n",
       "      <td>11</td>\n",
       "      <td>2194</td>\n",
       "      <td>4.864745</td>\n",
       "      <td>0.203066</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00552            5      1      41       4     2201   13.420732  0.090106   \n",
       "M00308            7      1      41       6     2199    8.939024  0.123885   \n",
       "M00166            7      1      41       6     2199    8.939024  0.123885   \n",
       "M00309            8      1      41       7     2198    7.658537  0.140312   \n",
       "M00002           12      1      41      11     2194    4.864745  0.203066   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00552    1.0  \n",
       "M00308    1.0  \n",
       "M00166    1.0  \n",
       "M00309    1.0  \n",
       "M00002    1.0  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v7_sig_kos = set(v7_correlations.query('p_value < .05').index)\n",
    "v7_enrichment = measure_enrichment(v7_sig_kos, modules, all_module_kos)\n",
    "v7_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "504898c7-3503-4f1f-96ca-ad1c1bb06862",
   "metadata": {},
   "source": [
    "We find nothing though."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0e97245-ecdb-40dc-848c-0196d057355c",
   "metadata": {},
   "source": [
    "### 1 year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "104b362e-a645-42eb-8e28-9f60ff7f78f8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(4278, 37)\n"
     ]
    }
   ],
   "source": [
    "ko_abunds_v9 = ko_abunds[meta_v9.index]\n",
    "ko_abunds_v9 = ko_abunds_v9.loc[(ko_abunds_v9 > 0).sum(axis=1) > ko_abunds_v9.shape[1]*.2]\n",
    "ko_abunds_v9 = ko_abunds_v9.loc[ko_abunds_v9.var(axis=1) > 1e-10] # variance filter\n",
    "print(ko_abunds_v9.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "92e84f61-687b-42cd-a924-3242ef442a79",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K07080</th>\n",
       "      <td>0.544334</td>\n",
       "      <td>0.000496</td>\n",
       "      <td>0.628968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K13626</th>\n",
       "      <td>0.543860</td>\n",
       "      <td>0.000503</td>\n",
       "      <td>0.628968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01661</th>\n",
       "      <td>-0.543623</td>\n",
       "      <td>0.000506</td>\n",
       "      <td>0.628968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K06398</th>\n",
       "      <td>0.537459</td>\n",
       "      <td>0.000603</td>\n",
       "      <td>0.628968</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K09759</th>\n",
       "      <td>0.522285</td>\n",
       "      <td>0.000914</td>\n",
       "      <td>0.628968</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K07080  0.544334  0.000496  0.628968\n",
       "K13626  0.543860  0.000503  0.628968\n",
       "K01661 -0.543623  0.000506  0.628968\n",
       "K06398  0.537459  0.000603  0.628968\n",
       "K09759  0.522285  0.000914  0.628968"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v9_correlations = ko_abunds_v9.transpose().apply(spearmanr, b=meta_v9['median_mmNorm']).transpose()\n",
    "v9_correlations.columns = ['rho', 'p_value']\n",
    "v9_correlations['p_adj'] = p_adjust(v9_correlations['p_value'])\n",
    "v9_correlations = v9_correlations.sort_values('p_value')\n",
    "v9_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "4ddab8ef-9988-428c-a19f-416b7029f9ed",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "197\n"
     ]
    }
   ],
   "source": [
    "print(len(v9_correlations.query('p_value < .05')))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a39eff0-d20a-4ad2-97a6-b2641c117cad",
   "metadata": {},
   "source": [
    "At one year there is a large number of significant KOs. An alarmingly large number."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "578a9c37-dbc3-40be-a00c-09c13281c857",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00545</th>\n",
       "      <td>11</td>\n",
       "      <td>4</td>\n",
       "      <td>193</td>\n",
       "      <td>7</td>\n",
       "      <td>2170</td>\n",
       "      <td>6.424870</td>\n",
       "      <td>0.009531</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00159</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>194</td>\n",
       "      <td>6</td>\n",
       "      <td>2171</td>\n",
       "      <td>5.595361</td>\n",
       "      <td>0.032499</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00616</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>195</td>\n",
       "      <td>3</td>\n",
       "      <td>2174</td>\n",
       "      <td>7.432479</td>\n",
       "      <td>0.057947</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00377</th>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>195</td>\n",
       "      <td>8</td>\n",
       "      <td>2169</td>\n",
       "      <td>2.780769</td>\n",
       "      <td>0.198762</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00356</th>\n",
       "      <td>19</td>\n",
       "      <td>3</td>\n",
       "      <td>194</td>\n",
       "      <td>16</td>\n",
       "      <td>2161</td>\n",
       "      <td>2.088595</td>\n",
       "      <td>0.205074</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00545           11      4     193       7     2170    6.424870  0.009531   \n",
       "M00159            9      3     194       6     2171    5.595361  0.032499   \n",
       "M00616            5      2     195       3     2174    7.432479  0.057947   \n",
       "M00377           10      2     195       8     2169    2.780769  0.198762   \n",
       "M00356           19      3     194      16     2161    2.088595  0.205074   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00545    1.0  \n",
       "M00159    1.0  \n",
       "M00616    1.0  \n",
       "M00377    1.0  \n",
       "M00356    1.0  "
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v9_sig_kos = set(v9_correlations.query('p_value < .05').index)\n",
    "v9_enrichment = measure_enrichment(v9_sig_kos, modules, all_module_kos)\n",
    "v9_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "351ecbb8-4911-4b0a-81ea-6ed84d729841",
   "metadata": {},
   "source": [
    "But after testing for enrichment none is found."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "005f0da1-a8c2-4fb1-8ff8-f01aa1a3d251",
   "metadata": {},
   "source": [
    "## Break down titers into DTapHib and PCV\n",
    "\n",
    "We will go back through and do the same correlations but splitting median titer into median DTAPHib titer and median PCV titer."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a8b9831-1608-4fa8-9063-0550f0666b96",
   "metadata": {},
   "source": [
    "### 2 months"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "0691ee96-f62f-4b9c-b1a1-5f12d6eff5a4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K21645</th>\n",
       "      <td>-0.518328</td>\n",
       "      <td>0.002374</td>\n",
       "      <td>0.419946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02473</th>\n",
       "      <td>0.509313</td>\n",
       "      <td>0.002909</td>\n",
       "      <td>0.419946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K19355</th>\n",
       "      <td>0.494155</td>\n",
       "      <td>0.004045</td>\n",
       "      <td>0.419946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01689</th>\n",
       "      <td>0.490103</td>\n",
       "      <td>0.004407</td>\n",
       "      <td>0.419946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K09973</th>\n",
       "      <td>-0.486070</td>\n",
       "      <td>0.004794</td>\n",
       "      <td>0.419946</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K21645 -0.518328  0.002374  0.419946\n",
       "K02473  0.509313  0.002909  0.419946\n",
       "K19355  0.494155  0.004045  0.419946\n",
       "K01689  0.490103  0.004407  0.419946\n",
       "K09973 -0.486070  0.004794  0.419946"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_DTAPHib_correlations = ko_abunds_v5.transpose().apply(spearmanr, b=meta_v5['median_mmNorm_DTAPHib']).transpose()\n",
    "v5_DTAPHib_correlations.columns = ['rho', 'p_value']\n",
    "v5_DTAPHib_correlations['p_adj'] = p_adjust(v5_DTAPHib_correlations['p_value'])\n",
    "v5_DTAPHib_correlations = v5_DTAPHib_correlations.sort_values('p_value')\n",
    "v5_DTAPHib_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "1096ba26-19f1-4bb2-89be-6b18ea3e9ce2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "219\n"
     ]
    }
   ],
   "source": [
    "print(len(v5_DTAPHib_correlations.query('p_value < .05')))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "4dc8aa04-9b3a-4b56-b4bb-7b6a89d99bd7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00793</th>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>216</td>\n",
       "      <td>2</td>\n",
       "      <td>2186</td>\n",
       "      <td>15.180556</td>\n",
       "      <td>0.006472</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00133</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>217</td>\n",
       "      <td>5</td>\n",
       "      <td>2183</td>\n",
       "      <td>4.023963</td>\n",
       "      <td>0.127586</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00596</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>218</td>\n",
       "      <td>4</td>\n",
       "      <td>2184</td>\n",
       "      <td>2.504587</td>\n",
       "      <td>0.379595</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00007</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>218</td>\n",
       "      <td>5</td>\n",
       "      <td>2183</td>\n",
       "      <td>2.002752</td>\n",
       "      <td>0.436160</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00046</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>218</td>\n",
       "      <td>5</td>\n",
       "      <td>2183</td>\n",
       "      <td>2.002752</td>\n",
       "      <td>0.436160</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00793            5      3     216       2     2186   15.180556  0.006472   \n",
       "M00133            7      2     217       5     2183    4.023963  0.127586   \n",
       "M00596            5      1     218       4     2184    2.504587  0.379595   \n",
       "M00007            6      1     218       5     2183    2.002752  0.436160   \n",
       "M00046            6      1     218       5     2183    2.002752  0.436160   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00793    1.0  \n",
       "M00133    1.0  \n",
       "M00596    1.0  \n",
       "M00007    1.0  \n",
       "M00046    1.0  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_DTAPHib_sig_kos = set(v5_DTAPHib_correlations.query('p_value < .05').index)\n",
    "v5_DTAPHib_enrichment = measure_enrichment(v5_DTAPHib_sig_kos, modules, all_module_kos)\n",
    "v5_DTAPHib_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6c8701c0-febb-46fc-9c51-f640e231f855",
   "metadata": {},
   "source": [
    "Nothing is significantly associated with DTAPHib at 2 months."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "1ce08a46-b6b5-4c5a-9173-f4124ac2972b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K07464</th>\n",
       "      <td>0.482557</td>\n",
       "      <td>0.005155</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K07334</th>\n",
       "      <td>0.455870</td>\n",
       "      <td>0.008738</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02068</th>\n",
       "      <td>-0.450880</td>\n",
       "      <td>0.009601</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01941</th>\n",
       "      <td>-0.440367</td>\n",
       "      <td>0.011657</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K03885</th>\n",
       "      <td>0.438783</td>\n",
       "      <td>0.011997</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K07464  0.482557  0.005155  0.999555\n",
       "K07334  0.455870  0.008738  0.999555\n",
       "K02068 -0.450880  0.009601  0.999555\n",
       "K01941 -0.440367  0.011657  0.999555\n",
       "K03885  0.438783  0.011997  0.999555"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meta_PCV_v5 = meta_PCV.query(\"VisitCode == 'V5'\")\n",
    "ko_abunds_PCV_v5 = ko_abunds_v5[meta_PCV_v5.index]\n",
    "ko_abunds_PCV_v5 = ko_abunds_PCV_v5.loc[(ko_abunds_PCV_v5 > 0).sum(axis=1) > ko_abunds_PCV_v5.shape[1]*.2]\n",
    "v5_PCV_correlations = ko_abunds_PCV_v5.transpose().apply(spearmanr, b=meta_PCV_v5['median_mmNorm_PCV']).transpose()\n",
    "v5_PCV_correlations.columns = ['rho', 'p_value']\n",
    "v5_PCV_correlations['p_adj'] = p_adjust(v5_PCV_correlations['p_value'])\n",
    "v5_PCV_correlations = v5_PCV_correlations.sort_values('p_value')\n",
    "v5_PCV_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "2c324175-a730-4fdd-9af8-a6ba72c37942",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "38\n"
     ]
    }
   ],
   "source": [
    "print(len(v5_PCV_correlations.query('p_value < .05')))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "602f91a3-166d-49d0-bf01-72e242cb69ab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00609</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>37</td>\n",
       "      <td>5</td>\n",
       "      <td>2197</td>\n",
       "      <td>11.875676</td>\n",
       "      <td>0.097670</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00124</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>37</td>\n",
       "      <td>5</td>\n",
       "      <td>2197</td>\n",
       "      <td>11.875676</td>\n",
       "      <td>0.097670</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00049</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>37</td>\n",
       "      <td>8</td>\n",
       "      <td>2194</td>\n",
       "      <td>7.412162</td>\n",
       "      <td>0.142956</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00529</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>37</td>\n",
       "      <td>9</td>\n",
       "      <td>2193</td>\n",
       "      <td>6.585586</td>\n",
       "      <td>0.157554</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00346</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>37</td>\n",
       "      <td>9</td>\n",
       "      <td>2193</td>\n",
       "      <td>6.585586</td>\n",
       "      <td>0.157554</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00609            6      1      37       5     2197   11.875676  0.097670   \n",
       "M00124            6      1      37       5     2197   11.875676  0.097670   \n",
       "M00049            9      1      37       8     2194    7.412162  0.142956   \n",
       "M00529           10      1      37       9     2193    6.585586  0.157554   \n",
       "M00346           10      1      37       9     2193    6.585586  0.157554   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00609    1.0  \n",
       "M00124    1.0  \n",
       "M00049    1.0  \n",
       "M00529    1.0  \n",
       "M00346    1.0  "
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v5_PCV_sig_kos = set(v5_PCV_correlations.query('p_value < .05').index)\n",
    "v5_PCV_enrichment = measure_enrichment(v5_PCV_sig_kos, modules, all_module_kos)\n",
    "v5_PCV_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dcb0319c-5c1a-44a5-ab8c-736d917ad66e",
   "metadata": {},
   "source": [
    "The three modeuls identified previously are associatd with PCV and not DTAPHib at 2 months."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "23221d94-eacf-4d75-bc71-29284f01eeda",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/6t/1w2t3qmd1rx81mfw9sq_tfpr0000gn/T/ipykernel_12921/3837576614.py:1: FutureWarning: Passing a set as an indexer is deprecated and will raise in a future version. Use a list instead.\n",
      "  m00060_ko_correlations = v5_PCV_correlations.loc[modules['M00060']].sort_values('p_value')\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K09949</th>\n",
       "      <td>0.126897</td>\n",
       "      <td>0.488884</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02536</th>\n",
       "      <td>0.121701</td>\n",
       "      <td>0.506993</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00677</th>\n",
       "      <td>0.113270</td>\n",
       "      <td>0.537070</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00912</th>\n",
       "      <td>0.106672</td>\n",
       "      <td>0.561187</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02517</th>\n",
       "      <td>0.096408</td>\n",
       "      <td>0.599659</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K03269</th>\n",
       "      <td>0.075513</td>\n",
       "      <td>0.681249</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00748</th>\n",
       "      <td>0.046921</td>\n",
       "      <td>0.798720</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02527</th>\n",
       "      <td>0.032625</td>\n",
       "      <td>0.859306</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02535</th>\n",
       "      <td>0.028226</td>\n",
       "      <td>0.878125</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02560</th>\n",
       "      <td>0.024194</td>\n",
       "      <td>0.895433</td>\n",
       "      <td>0.999555</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K09949  0.126897  0.488884  0.999555\n",
       "K02536  0.121701  0.506993  0.999555\n",
       "K00677  0.113270  0.537070  0.999555\n",
       "K00912  0.106672  0.561187  0.999555\n",
       "K02517  0.096408  0.599659  0.999555\n",
       "K03269  0.075513  0.681249  0.999555\n",
       "K00748  0.046921  0.798720  0.999555\n",
       "K02527  0.032625  0.859306  0.999555\n",
       "K02535  0.028226  0.878125  0.999555\n",
       "K02560  0.024194  0.895433  0.999555"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m00060_ko_correlations = v5_PCV_correlations.loc[modules['M00060']].sort_values('p_value')\n",
    "m00060_ko_correlations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "78310260-ae82-43a0-822a-3737b18fe03a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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iIiIiIiIiIiIyA1YnWhes2YNAKB///4IDg6u9Jklhg8fbu0hEBEREREREREREZELsDrRPHPmTEgkErRv316XaNZ+ZgkmmomIiIiIiIiIiIjcm9WJ5gYNGpRvwNe32mdERERERERERERE5D2sTjTv3LnTrM+IiIiIiIiIiIiIyLP5OGvH+fn5OHPmjLN2T0REREREREREREQiETXR3KJFCzz++ONmLTt+/HhMmjRJzN0TERERERERERERkROImmgWBAGCIJhcTqFQIDs7GwUFBWLunoiIiIiIiIiIiIicwOoxmtPT0/Hkk09WSyyfPHkSPXv2NLieIAgoKChASUkJoqOjrd09EREREREREREREbkIqxPNcXFxaNeuHX777bdKn5eVleHGjRsm1/fx8cHkyZOt3T0RERERERERERERuQirE80AMGPGDHTt2hVAeU/l1157DdHR0XjqqacMriORSFCjRg3Ex8ejcePGtuyeiIiIiIiIiIiIiFyATYnmevXqYciQIbr/f+211xAWFlbpMyIiIiIiIiIiIiLybDYlmqs6d+6cmJsjIiIiIiIiIiIiIjfg4+wDICIiIiIiIiIiIiL3xkQzEREREREREREREdmEiWYiIiIiIiIiIiIisgkTzURERERERERERERkEyaaiYiIiIiIiIiIiMgmTDQTERERERERERERkU2YaCYiIiIiIiIiIiIimzDRTEREREREREREREQ28RV7gwqFAmvWrMHff/+Nu3fvQqVSQRAEvctKJBJ8//33Yh8CERERERERERERETmQqInmvLw8jBo1CpcvXwYAgwlmLYlEIubuiYiIiIiIiIiIiMgJRE00f/3117h06RKkUim6d++Opk2bIiAgQMxdEBEREREREREREZGLETXRvGPHDkgkEsyfPx+9evUSc9NERERERERERERE5KJEnQzw5s2baNy4MZPMRERERERERERERF5E1ERzrVq14OfnJ+YmiYiIiIiIiIiIiMjFiZpo7tChAzIyMpCbmyvmZomIiIiIiIiIiIjIhYmaaJ48eTIAYObMmSgrKxNz00RERERERERERETkokSdDPDWrVsYNWoUli1bht69e6Nz584IDw+HTCYzuM7UqVPFPAQiIiIiIiIiIiIicjBRE80TJ06ERCIBUJ50/vXXXw0uKwgCJBIJE81EREREREREREREbk7U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qcTEiRNx9OhRTJ48GaNGjUJoaKjue4VCgbVr1+KTTz5B/fr18d1331m7+0rkcjm++OILs5Zt2LAhzp8/b/D7zp072zScBxEREREREREREZG3EbVv+ZIlS5CSkoJ3330XU6ZMqZRkBoCgoCCMHj0aH3zwAU6cOIF58+aJuXsiIiIiIiIiIiIicgJRE80bNmxA/fr18Z///Mfocvfffz8aNGiAbdu2ibl7IiIiIiIiIiIiInICURPN169fR/369c1atk6dOsjNzRVz90RERERERERERETkBKImmuvVq4cLFy5AoVAYXS4vLw9paWmIiIgQc/dERERERERERERE5ASiJpqTk5OhUCjw5ptvQq1W612muLgY06dPh1KpRJ8+fcTcPRERERERERERERE5ga+YG3vyySexefNm/Pbbbzh9+jQGDRoEuVyOoKAgFBYW4syZM/jll190Q2xMmDBBzN0TERERERERERERkROImmhu3Lgx5s+fjxdffBEZGRmYP39+tWUEQUCTJk3w+eefIywsTMzdExEREREREREREZETiJpoBoDOnTvj999/x8qVK7F3715kZGQgPz8ftWvXRkxMDPr164cRI0bA399f7F0TERERERERERERkROInmgGgJo1a2LSpEmYNGmSPTZPRERERERERERERC5E1MkADSkqKnLEboiIiIiIiIiIiIjICeySaM7NzcXHH3+MQYMG4Z577kHHjh0BADk5ORg9ejT+/PNPe+yWiIiIiIiIiIiIiJxA9KEz/v77bzzzzDO4ffs2BEEAAEgkEgDAtWvXcOTIERw9ehSvvfYaHn/8cbF3T0REREREREREREQOJmqP5pycHEyePBl5eXlo1aoV3njjDcTFxem+Dw8PR+fOnaHRaDB79mwcPXpUzN0TERERERERERERkROImmj+5ptvkJ+fj+HDh2PVqlV47LHHUKtWLd33ERERWLp0KR555BEIgoDly5eLuXsiIiIiIiIiIiIicgJRE827d+9GQEAAZsyYYXS56dOnIzAwkD2aiYiIiIiIiIiIiDyAqInm69evo2nTpggODja6XI0aNRATE4O8vDwxd09ERERERERERERETiBqolkmkyE/P9+sZYuLixEYGCjm7omIiIiIiIiIiIjICURNNDdt2hTXrl3DpUuXjC6Xnp6OjIwMNG3aVMzdExERERERERER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vSJy5coV9OnTBwCwY8eOSmMZpaWl4fHHH8edO3cQGxuLZs2a4ezZs7h8+TKioqKwcuVK3TgvWps2bcLLL78MQRDQtm1bhIWF4ciRI7hz5w66deuGr776qlrPu1mzZuGnn37SPWFRq9U4fPgwlEolpk6div/+97+VllcoFBg9ejROnTqF0NBQdOzYETdu3MA///wDPz8/LFq0CJ07dxb71LolbygPVWl/Q1BQEI4dO2brKSQPwzrBOmGIp5eNadOm4ddff4VMJkO/fv0MzjgdGRmJadOm2Xw+qTqWsXKuWMY8/W9jyPbt2zFlyhQkJSVh2bJltpxCqsLTy5Qj67unn0tD7FU/veF83rlzBxMmTMCpU6cQFBSEpKQk3L17FydOnIBSqcTTTz+NF154QbRz6kye/vd09baFp59/Qzyh/cBEs4VSU1Mxf/58pKSkQKFQoGHDhujXrx8mTJhQbRwiYwUdAK5evYr58+dj3759yM/PR0REBHr06IGnn37a4Oyef/31F77++mscP34cKpUKjRo1wtChQ/Hoo4/qfcVBEASsW7cOK1euRHp6Ovz9/REXF4dx48bhvvvu07sPhUKBxYsXY/Pmzbh27Rrq1KmD1q1bY8qUKWjevLk1p81jeUN50PcbmFQjQ1gnyBBPLhvt27dHYWGhyXPQrFkz/PrrryaXI+uwjLluGfPkv40hnnCj6Mo8uUw5ur578rk0xJ710xvOZ2lpKZYtW4ZNmzYhMzMTfn5+aNGiBcaMGWP238BdePLf0x3aFp58/g3xhPYDE81EREREREREREREZBNOBkhERERERERERERENmGimYiIiIiIiIiIiIhswkQzEREREREREREREdmEiWYiIiIiIiIiIiIisgkTzURERERERERERERkEyaaiYiIiIiIiIiIiMgmTDQTERERERERERERkU2YaCYiIiIiIiIiIiIimzDRTEREREREREREREQ2YaKZiIiIiIiIiIiIiGzCRDMRERERERERERER2YSJZiIiIiIiIiIiIiKyCRPNRERERERERERERGQTJpqJiIiIiIiIiIiIyCZMNBMRERERERERERGRTZhoJiIiIiIiIiIiIiKbMNFMRERERERERERERDZhopmIiIiIiIiIiIiIbMJEMxERERERERERERHZhIlmIiIiIiIiIiIiIrIJE81ERERERERERERE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rF+/vtrnly5dwscff2xxPUEQcPHiRZw6dQr16tVzdPdERERERERERERE5CEcrmhu2rQpNm/ejJycHONnMpkMly5dwueff251XUEQAAC33Xabo7snIiIiIiIiIiIiIg/hcEWzQqHAq6++ii+++ML42V9//YXatWujVatWFteTy+UIDQ1FmzZtMGnSJEd3T0REREREREREREQewuGKZgDo1asXevXqZfz/Vq1aQaVSYfny5U4njIiIiIiIiIiIiIi8g1MVzVW98847qF+/vpSbJCIiIiIiIiIiIiIPJ2lF8/Dhw6XcHBERERERERERERF5AYcrmtesWQMAGDx4MMLCwip9Zo9Ro0Y5mgQiIiIiIiIiIiIi8gAOVzS/9tprkMlk6NKli7Gi2fCZPVjRTEREREREREREROTdHK5obty4ccUGAgKqfUZERERERERERERE/sPhiubff/9d1GdERERERERERERE5Nvk7tpxfn4+jh075q7dExEREREREREREZFEJK1obt26NcaOHStq2QkTJmDy5MlS7p6IiIiIiIiIiIiI3EDSimZBECAIgs3lSkpKcPXqVRQUFEi5eyIiIiIiIiIiIiJyA4fHaM7MzMSkSZOqVSwfOXIE/fr1s7ieIAgoKChAaWkpYmNjHd09EREREREREREREXkIhyuaExIS0LlzZ/z888+VPi8vL8fly5dtri+XyzF16lRHd09EREREREREREREHsLhimYAeOmll9CrVy8AFS2VX3nlFcTGxuKxxx6zuI5MJkOtWrWQmJiIZs2aObN7IiIiIiIiIiIiIvIATlU0N2jQAMOHDzf+/yuvvIL69etX+oyIiIiIiIiIiIiIfJtTFc1VnThxQsrNEREREREREREREZEXkLs7AURERERERERERETk3VjRTEREREREREREREROYUUzERERERERERERETmFFc1ERERERERERERE5BRWNBMRERERERERERGRU1jRTEREREREREREREROYUUzERERERERERERETmFFc1ERERERERERERE5JQAqTdYUlKCNWvW4J9//kFhYSG0Wi0EQTC7rEwmw1dffSV1EoiIiIiIiIiIiIioBkla0Xzjxg2MGTMGZ8+eBQCLFcwGMplMyt0TERERERERERERkRtIWtH8xRdf4MyZM1AoFOjTpw9atGiB4OBgKXdBRERERERERERERB5G0ormbdu2QSaTYd68eejfv7+UmyYiIiIiIiIiIiIiDyXpZIBXrlxBs2bNWMlMRERERERERERE5EckrWiuU6cOAgMDpdwkEREREREREREREXk4SSuau3btiuzsbOTm5kq5WSIiIiIiIiIiIiLyYJJWNE+dOhUA8Nprr6G8vFzKTRMRERERERERERGRh5J0MsDr169jzJgxWL58OQYMGICUlBRERUVBqVRaXGf69OlSJoGIiIiIiIiIiIiIapikFc2PPvooZDIZgIpK540bN1pcVhAEyGQyVjQTEREREREREREReTlJK5q7desm5eaIiIiIiIiIiIiIyAtIWtG8fPlyKTdHRERERERERERERF5A0skAiYiIiIiIiIiIiMj/uK2iubi42OoYzkRERERERERERETkHSQdOgMATpw4gc8//xynTp1CaWkp9Hp9pe+1Wi1KS0tRXFwMmUyGO++8U+okEBEREREREREREVENkrSiOScnB2PGjEFpaSkEQbC5fKNGjaTcPRERERERERERERG5gaQVzUuXLoVarUaDBg0wZswYBAcH4/3330efPn1w22234fLly9i4cSPOnDmDnj174ssvv5Ry90RERERERERERETkBpJWNO/duxcymQyfffYZ2rZtCwBYsmQJCgoKMHr0aADApEmT8Oijj2L37t34448/0KdPHymTQEREREREREREREQ1TNLJAK9evYpGjRoZK5kBoHXr1jh27Bh0Oh0AIDg4GP/9738hCAJWrVol5e6JiIiIiIiIiIiIyA0krWjW6XSoX79+pc9iY2Oh0WiQk5Nj/CwhIQFNmjTB0aNHpdw9EREREREREREREbmBpENn1K1bFzdv3qz0WdOmTQEAmZmZaNGiRaVlT548Kcl+s7OzMX/+fOzfvx+5ubmIjo7GkCFD8NhjjyE0NFT0dkpLS9G5c2dj62tz1qxZg3bt2kmRbCIiIiIiIiIiIiKfIGlFc5s2bbBjxw6kp6cjKSkJQEWLZkEQcOjQIQwaNAhARcvnCxcu2FUJbMnhw4cxbtw4lJSUoH379mjXrh3++ecffP7550hNTcW3336LsLAwUds6ceIEdDodGjdujC5duphdpm7duk6nmYiIiIiIiIiIiMiXSFrRPHjwYGzfvh2TJk3CE088gfvvvx+dO3dGSEgIVq5cif79+6NNmzaYP38+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3krf3bx5E/v27YNSqUTPnj1Fbevzzz/Hb7/9hunTp0Mulxu/02g02LZtGwCgf//+0h4EgHbt2km+TSLyP4wlRCQFxhIikgrjCRFJgbGEyHvIbS/iuW677TY0btwYu3btwjfffGP8vLS0FK+++ipKSkowatQoREZGGr/TaDTIyspCVlYWNBqN8fPOnTujXbt2yMrKwty5c40tsXU6HWbPno1Lly6hT58+aN26dc0dIBEREREREREREZEXkAkOjm3RqlUrqFQqvP766xaXeeihh2wu061bN0d2b7Rv3z5MnjwZpaWlSEpKQpMmTXDgwAFcvXoVbdq0wfLlyxEWFmZc/vz58xg4cCAAYNu2bWjSpInxu4yMDIwdOxZ5eXmIj49Hy5Ytcfz4cZw9exYxMTFYuXIloqKinEovERERERERERERka9xqqLZ2ZkVZTIZjh075tQ2AODUqVOYN28e0tLSUFJSgiZNmmDQoEGYOHFipUpmwHpFMwBcuHAB8+bNw86dO5Gfn4/o6Gj07dsXU6ZMqdQymoiIiIiIiIiIiIgqOFXR7PTOZTIcP37c6e0QERERERERERERkfs4XNF84cIFSRIQExMjyXaIiIiIiIiIiIiIyD0crmgmIiIiIiIiIiIiIgIAubsTQERERERERERERETejRXNREREREREREREROQUVjQTERERERERERERkVNY0UxERERERERERERETmFFMxERERERERERERE5hRXNREREREREREREROQUVjQTERERERERERERkVNY0UxERERERERERERETmFFMxERERERERERERE5hRXNREREREREREREROQUVjQTERERERERERERkVMC3J0Asi47Oxvz58/H/v37kZubi+joaAwZMgSPPfYYQkND7drWlStXsGDBAuzevRuXL19GZGQkBgwYgGnTpiEiIsLsOkeOHMGCBQtw9OhRFBQUoGnTprjnnnswbtw4KJVKs+ts2rQJX3/9NU6fPg2dTodWrVph3LhxuP3220Wlc8KECThw4AAOHDjgF8d/6tQpLF68GGlpabh+/TqCg4PRunVrDBgwAOnp6T597GfOnMGCBQvw559/Ii8vDxEREUhJScGkSZOQkJBg1zGSc/w5r91333248847qy1fWlqKzp07Q6fTWTzWNWvWoF27dha/94fzev/99+PAgQMW0/3CCy9g4sSJTh8LVecP15e9+VYMfzhvVaWmpmLKlClITk7G8uXL7TpGA384b4Ig4Mcff8T333+PkydPory8HM2bN8ddd92FRx55BIGBgXYdpzfxh9+3tLQUX3/9NTZs2IBz584hJCQE3bp1w+OPP45WrVrZdYyeyh9+R1fcF0g6/nANuiKW+MN5q8q03sdR/nDevDHmyQRBENydCDLv8OHDGDduHEpKStC+fXs0atQI//zzD65du4bExER8++23CAsLE7Wtc+fOYcyYMbh27RpUKhXi4uJw7NgxnDt3DtHR0Vi1ahWio6MrrZOamoonnngCer0eXbt2RZ06dfDXX38hPz8fPXv2xBdffFEt83zwwQdYvHgxQkND0b17d5SXlyMtLQ0ajQZPPPEEnnzySavpfO+997BkyRKEhobiq6++8vnj//333/HUU09Bo9GgefPmSEhIQG5uLg4dOgRD1vTVYz9x4gQefPBBFBUVIS4uDgkJCTh//jyOHz8OpVKJefPmoV+/fqKOkZzjD7HGUl47fPgw9Ho9Ro8ejbfeeqvSOgcPHsR9992Hxo0bo0uXLmaPd/r06WjatKnfnledTocuXbpAp9Nh0KBBZtM+bNgw9O3b16ljoer84fpyJN/yvFV37do13HXXXbhx44bDFc3+cN50Oh1mzJiBX375BUFBQejevTt0Oh3++ecfqNVqDBw4EPPnz4dMJrP7/Hk6f/h9y8rK8OijjyItLQ0NGjRA586dcenSJRw+fBhKpRJffPEFevbs6dyJdDN/+B1dcV8g6fjDNeiKWOIP560q03ofRyua/eG8eW3ME8gjaTQaYeDAgYJKpRK+//574+dqtVqYMmWKoFKphDfeeEP09h544AFBpVIJH3/8sfEzrVYr/Oc//xFUKpUwefLkSsvn5eUJnTt3Ftq0aSPs3LnT+PnNmzeF0aNHCyqVSli8eHGldXbv3i2oVCqhb9++wvnz542fHz9+XOjevbuQmJgoHDp0yGz6iouLhRdeeEFQqVSCSqUSOnTo4PPHX1BQICQnJxu3pdfrBUGo+O179+5tPBc///yzzx27Xq8XbrvtNkGlUgnz5s0zHrsgCMLq1asFlUol3HLLLUJJSYno4yTH+EOssZTXBEEQDh48KHTp0qVSXjNYsWKFoFKphDlz5og+fgN/OK+CIAinTp0SVCqVcN9997nsWKg6f7i+HM231vjDeatKr9cL48ePN5Ypxo4dK/r4DPzlvC1evFhQqVTCkCFDhIsXLxo/P3funDBgwABBpVIJ69evF32c3sJfft+PPvpIUKlUwoQJEwS1Wm38/McffxQSExOFHj16CEVFRaKP09P4w+/oivsCSccfrkFBkD6W+Mt5M6ha79OxY0fRx2bKH86bN8c8VjR7qB9//FFQqVTCuHHjqn1348YNoWPHjkJSUpKQl5dnc1t//fWXoFKphNtvv13Q6XSVvisvLxf69esnqFQqISMjw/j5/PnzBZVKJbzyyivVtpeZmSmoVCqhZ8+eglarNX4+btw4QaVSCT/++GO1dVauXCmoVCrhqaeeqvS5Xq8XNm3aJNx6662CSqUyBou2bdv6/PH/8MMPZh/6DL+94Zw89thjPnfshnQNHjzYbLqHDBkiqFQqYc+ePTaPkZzjD7HGUl4zWLRoUbW8JgiC8PLLLwsqlUr49ddfbR57Vf5wXgVBENatWyeoVCrhzTfftHkcjh4LVecP15ej+dYafzhvVRkqT8eOHetwRbM/nLeysjIhOTlZSEpKMht/1q5dK/Tp00f44IMPbB6jt/GH37e4uFjo3Lmz0KpVq0oP9wbPPPOMoFKphBUrVtg8Rk/lD7+jK+4LJB1/uAZdEUv84bwJguV6H0crmv3hvHlzzONkgB7q999/BwDcdttt1b6rV68eunfvDo1Gg507d4re1sCBAyGXV/7JlUolBgwYAADYtm1btXXMjRPTokULqFQqXLt2DYcPHwYAFBUVIS0tDQqFAgMHDqy2zu233w6ZTIbt27dXGu/0woULePrpp3Hx4kVMmDABX3zxBQAYl/Hl49doNEhKSqo2PIRh3z169AAAXL161eeOvWvXrti5cyc+//xzs+k2LBcQwGHkXc0fYo2lvGYQHx8PoHJeA4D09HQAsDoGsyX+cF4B+8+RI8dC1fnD9eVovhVzrL583kwdO3YMH374IXr06IGHH37Y5jFZ4g/nbffu3cjLy0O/fv3MzhExfPhw7NixA88995zNY/Q2/vD7/vXXXygqKkJSUhJiYmKqrWMY+smQFm/kD7+jK+4LJB1/uAZdEUv84bwBlut9HOUP582bYx4rmj3UqVOnAACJiYlmvzcUgk+cOCF6WyqVSvS2MjIy7FonKysLOp0OjRs3NjsOTkREBOrXr4/S0lLk5OQYP1cqlRgxYgQ2btyIF198EUFBQQAAvV4PwLeP/7777sPatWurTZJlSK9arQaAamMB+cKxA0DDhg3RvHnzSsuWl5dj/vz5yMnJQVxcHDp27GjzGMk5/hBrLOU1g0OHDgGonNfKy8uRlZWFunXrYs+ePbj//vvRtWtXdOnSBePHj8eff/5p/iT8P384r0BFRRYAlJSUYMqUKejVqxc6dOiAESNG4JtvvjHGcmeOharzh+vLkXxriz+cNwO1Wo1nn30WtWrVwrvvvuvUuML+cN6OHDkCAOjYsSMEQcCOHTvw7rvv4rXXXsPixYtx5coVm8fmrfzh9z158qTd6fI2/vA7uuK+QNLxh2vQFbHEH84bYLnex1H+cN68OeaxotlDGd5KREVFmf2+YcOGlZaTclv5+fkoLS21ax1b+7CU5qioKLzzzjuIi4urtKzw/xPh+frxW0vvr7/+CgAYOnSoQ9sRky5POfbU1FRMmjQJffr0wSeffIJOnTph0aJFbNFcA/wl1lhy5coV48RYpnntxIkT0Gg0yMvLw8svvwwA6N69OyIjI7F7925MmDABCxcutLhdfziver0ex48fBwD897//RU5ODjp16oQWLVrgxIkTmDVrFh5//HFotVqHj4XM84fryxpL+dYWfzpvs2fPRnZ2Nt58802r64vhD+fN8FAXEhKChx9+GJMnT8bSpUvx/fff44MPPsDgwYOxefNmm8fnjfzh97W1juHz69evV3tB6i384Xe0xtH7AknHH65BV8QSfzhvhuXN1fs4yl/OmyWeHvNYi+OhSkpKAADBwcFmvzd8blhOzLZCQkJEbcvw38DAwGpdByytU1xcbDW9AIxvrcSkuep+bO3fGm87fsP3arUa3bp1wx133GF132K25enHvmfPHvzxxx/G/9doNMjKykLTpk0tbpOk4c+xprCwEI8//jiKi4ur5TVDS92GDRtiwYIFlYaGWLduHV599VXMnTsXnTp1Qrdu3apt2x/Oa05ODoqLixEQEIDZs2fjnnvuMS576NAhPPHEE0hNTcUXX3yBadOmOXQsZJ4/XF+WWMu3tvjLefv111/x/fffY+TIkWa7dNrLH85bUVERAOCjjz6CQqHA//73P/Tu3RuFhYX49ttvsXTpUjz33HNo3Lgx2rdvb/M4vYk//L620mXasq6kpMRsazNP5w+/oyXO3BdIOv5wDboilvjDeXMFfz5v3hDz2KLZQykUCgCw2dXR0PJXym0ZMouYbpaGdcTuw3QdMfzt+HNzc43fN2rUCB999JHFbfrSsU+aNAmHDx/Gtm3b8OSTT+LkyZOYOnWqV4+V5y38Ndbk5uZi3LhxOHr0KJo0aVItr917771ITU3FmjVrqo0/PHz4cDzwwAMQBAFff/212e37w3mNj4/H7t278fPPP1eqZAaADh064PXXXwcALF++3NiqQ8rz4s/84foyx1a+tcUfztvly5fx+uuvo1mzZnj11VdtrieGP5y3srIyABUPb/Pnz8ewYcNQt25dNG3aFC+++CLuu+8+aDQazJs3z+Y2vY0//L6GdSwx3Za33n/84Xc0x9n7AknHH65BV8QSfzhvruCv581bYh4rmj1UrVq1APw7Tm9Vhqb6lt66OLMtw/JlZWUWu3xYWsfwuTmGQnxoaKjNNBv40/GfOnUK9957rzGwzJ07F5GRkTb3bY23HHuDBg0QFBSEJk2a4IknnsATTzwBvV6Pjz/+2PLBkST8MdYY8lp6ejri4uKwYsWKanlNLpejcePGFrs3GSZxMIzrWZW/nNf69esjNjbW7PL9+vWDQqHAzZs3ceHCBYeOhczzl+vLlJh8a4uvnze9Xo/nn38eRUVF+N///mdc31m+ft6Af1sYtWvXDl26dKm2/NixYwEAe/fu9dqKSEv84fe1tY7p59Zam3kyf/gdq5LivkDS8Ydr0BWxxB/Omyv443nzppjHimYPZRif5dq1a2a/N4zbYlhOym2FhYUZu3mIXcdQGWNpeXvTbHgr4y/Hv2PHDtx///04f/68zZuSrx27OYbWkRkZGdBoNKLWIcf4W6wxzWudO3fGypUr0ahRI+sHZoZh0gVLBRJ/O6/mBAYGIiIiAsC/XcCkPC/+zN+uL6nyra+ft19//RVpaWmoV68eli9fjueee87499VXXwGomIzG8JlYvn7eABgf1Jo0aWJ2ecPnZWVlxu6vvsIffl9b6xgme4yIiIBSqbS4XU/mD7+jKanuCyQdf7gGXRFL/OG8uYK/nTdvi3msaPZQhtkzMzMzzX5v+NzSLJvObsswe6bYdRISEqBQKHDhwgWzFS83btxAbm4ugoKC0Lx5c5tpNnRH8IfjX7VqFaZOnYri4mLcddddxpaSvnzsO3bswCuvvIJ169aZ3UdgYCAAQKfT+VzLIU/jT7Gmal776quvUK9ePbP7XbBgAZ566ins2bPH7PeXL18GYHmWX384r5s3b8aMGTOMFVhVlZaWIi8vDzKZzHiepDwv/swfri8De/KtLb5+3gwvdK5du4YNGzZU+ktLSwNQ0eXS8JlYvn7eTNc1VBJUdf36dQAVLdS8cfxea/zp983IyBCdLm/jD7+jgZT3BZKOP1yDrogl/nDeXMGfzps3xjxWNHuovn37AgC2bNlS7bubN29i3759UCqV6Nmzp+ht/fbbb9Wa9ms0Gmzbtg0A0L9/f1H7z8rKwqlTpxAREYEOHToAqBi4/JZbboFGozE7ru6WLVsgCAJ69eol6u2eYQwbXz/+H3/8ETNnzoROp8OTTz6JDz74wJgOXz72S5cu4YcffsCSJUvMViRv374dQEUAN1Q6k2v4S6wxl9esXVvZ2dnYsmWLxZchhs/79etn9nt/OK+FhYXYuHEjvv76a2i12mrrbNy4ERqNBh07dkR4eLjDx0LV+cP1Bdifb8Ueq6+etxEjRuDkyZNm/+bPnw8ASE5ONn4mlq+fN6AilstkMhw8eBDnzp2rts6OHTsAwOzkr97OH37fLl26ICwsDEeOHDG+KDa1efNmAJbv6d7AH35HQPr7AknHH65BV8QSfzhvruAv581rY55AHkmtVgv9+vUTVCqVsGLFikqfT506VVCpVMLMmTMrrVNeXi5kZmYKmZmZQnl5eaXvRo4cKahUKuGDDz4Q9Hq9IAiCoNVqhZkzZwoqlUp49NFHKy1/5coVoXPnzkKbNm2ErVu3Gj+/efOmcO+99woqlUpYuHBhpXVSU1MFlUol9O7dW8jOzjZ+fvz4caF79+6CSqUSDh48aPW4z507J6hUKqFDhw4+f/xZWVlC+/btBZVKJXz66aeVjtHXjz0/P9/4+Zw5cwSdTmf8bt++fUK3bt0ElUolbNiwQSDX8ofrzVJes+aff/4REhMThcTERGH9+vWVvvvqq68ElUolJCcnC9evXze7vj+c18LCQuGWW24RVCqV8MYbb1RKc1pamtClSxchMTFR2L17t1PHQtX5w/XlSL61xR/OmyW//faboFKphLFjx9pctip/OW/Tp08XVCqVMHLkyEqx/dChQ0JycrKgUqmEXbt2iT9xXsJfft93331XUKlUwrhx44TCwkLj5+vXrxdatWoldO/eXSguLhZ/4jyMP/yOrrgvkHT84RoUBOljib+ct6oM9T4dO3a0eY7M8Yfz5s0xTyYI7Jfuqfbt24fJkyejtLQUSUlJaNKkCQ4cOICrV6+iTZs2WL58eaXue+fPnzcOu7Bt27ZK48xlZGRg7NixyMvLQ3x8PFq2bInjx4/j7NmziImJwcqVK6tNerVhwwa88MILEAQBnTp1Qv369fHXX38hLy8PvXv3xmeffVbtLdXMmTPx3XffGd/Y6HQ67Nu3DxqNBtOnT8fjjz9u9ZgNxxAaGorPP//cp49/xowZ2LhxI5RKJQYNGlRpttDr169j37590Ov1iIyMRJcuXXzq2AFg9+7dePzxx6FWq9G0aVO0atUKFy9exLFjxyAIAqZMmYJnnnnGytVCUvH1WGMtr5lq1KgRZsyYYfz/hQsXYs6cOQCAVq1aoXnz5sjIyMDp06cRGhqKRYsWoWvXrn57XgFgz549mDp1KtRqNRo3boykpCTk5ubiwIEDAICXXnoJjzzySKV1HDkWqs7Xry9H862/nzdLtm7dimnTpiE5ORnLly8Xfb786bzl5eVh4sSJOHr0KEJDQ5GcnIzCwkIcPnwYGo3Gp8sl/vD7lpSU4KGHHsLRo0cRERGBbt264fLlyzh06BACAwOxcOFCpKSkSH1qa5Sv/46uui+QdHz9GgRcE0v84bxVZVrvY3husJevnzdvjnmsaPZwp06dwrx585CWloaSkhI0adIEgwYNwsSJE6uNEWct4wDAhQsXMG/ePOzcuRP5+fmIjo5G3759MWXKFIuzVf7999/44osvcPDgQWi1WjRt2hQjRozAAw88YLbJviAIWLt2LVauXInMzEwEBQUhISEB48ePx6233mrzeKsGHF8+/i5duqCoqMjmOVEoFAgICPCpYzfIzs7GwoULsWvXLty4cQO1a9dGx44dMW7cOK8v7Hsb5jWgZcuW2LhxY6XP9uzZg6VLl+LQoUMoLi5GgwYN0KtXL0yZMgUxMTE2t+nL59UgJycHX3zxBf78809jPu7UqRMmTJhgsSLekWOh6nz5+nIm39riy+fNEmcrmgH/OG9lZWVYvnw5NmzYgJycHAQGBqJ169Z4+OGHRZ9rb+UPv29JSQkWLVqETZs24eLFi6hXrx46dOiAadOmoVWrVo6cNo/jy7+jK+8LJB1fvgYNXBFL/OG8mTsGZyqaAd8+b94c81jRTERERERERERERERO4WSAREREREREREREROQUVjQTERERERERERERkVNY0UxERERERERERERETmFFMxERERERERERERE5hRXNREREREREREREROQUVjQTERERERERERERkVNY0UxERERERERERERETmFFMxERERERERERERE5hRXNREREREREREREROQUVjQTERERERERERERkVNY0UxERERERERERERETmFFM7nUxo0bkZiYiMTERMycOdPqsg899BASExPx4Ycf1lDqXGPAgAFITEzE999/7+6kEPkMxhIikgrjCRFJgbGEiKTAWEK+hhXN5FI//PCD8d8//fQTioqK3JgaIvJWjCVEJBXGEyKSAmMJEUmBsYR8DSuayWUuXryIvXv3om7duujYsSNKSkqwYcMGdyeLiLwMYwkRSYXxhIikwFhCRFJgLCFfxIpmcpm1a9dCr9ejU6dOGDBgAADgu+++c3OqiMjbMJYQkVQYT4hICowlRCQFxhLyRaxoJpcQBAHr1q0DAPTp0wdDhgwBAJw4cQIHDx50Y8qIyJswlhCRVBhPiEgKjCVEJAXGEvJVrGgml9i7dy/Onz8PuVyOgQMHolmzZmjfvj0AYOXKlTbXP3z4MB599FF06dIFnTp1wr333ovvvvsOOp2u2rK2BpJ/6aWXkJiYiJdeeqnS54YB98vKyvDbb7/hoYceQteuXdGhQwfcc889WLZsGTQajdltXr16Fe+99x4GDRqE9u3bo1+/fnjvvfdsjqd05swZzJ49G3fddRe6du2KpKQkdO/eHQ8//DBWr15d7fj27duHxMRE3HvvvdBoNFiyZAnuuusudOjQAV27dsW4ceOwdetWi/u7du0aPv74YwwbNgydOnVCx44dMXz4cCxevBjl5eVm19m6dSsmT56MlJQUtG3bFr1798aMGTOQnp5u9diIXIGxxDzGEiL7MZ6Yx3hCZB/GEvMYS4jsw1hiHmOJ9wtwdwLINxkGtE9OTkZUVBQA4M4778Thw4fxyy+/4JVXXkF4eLjZdffu3Ysvv/wSgiBApVKhsLAQhw4dwqFDh/Dbb7/hs88+Q2BgoGRp/eijj7BkyRKEhoaiefPmuHr1Ko4fP47jx4/j0KFD1WZ0PXHiBB599FFcu3YNSqUSKpUK+fn5WLJkCXbu3Am1Wm12P1u3bsUzzzyD8vJyhIaGomnT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\n",
      "text/plain": [
       "<Figure size 1500x600 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "m00060_ko_abunds = ko_abunds_PCV_v5.loc[m00060_ko_correlations.index].unstack().reset_index()\n",
    "m00060_ko_abunds.columns = ['Sample', 'KO', 'Abundance']\n",
    "m00060_ko_abunds['PCV median titer'] = [meta_PCV_v5.loc[sample, 'median_mmNorm_PCV'] for sample in m00060_ko_abunds['Sample'].values]\n",
    "g = sns.FacetGrid(m00060_ko_abunds, col=\"KO\", col_wrap=5, height=2, sharex=False)\n",
    "_ = g.map(sns.scatterplot, \"Abundance\", \"PCV median titer\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e9d6cdb-6924-4efd-9807-107a010be107",
   "metadata": {},
   "source": [
    "The first 7 plots here are from significant KOs. Not super compelling but it is significant."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60c86adf-8a34-43d1-88ac-d1cd96c3fe3c",
   "metadata": {},
   "source": [
    "## 4 months"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "a4c8431f-bf2c-4a5e-971b-b2a65fe9f4a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K18827</th>\n",
       "      <td>-0.518252</td>\n",
       "      <td>0.001691</td>\n",
       "      <td>0.976923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K12994</th>\n",
       "      <td>-0.515988</td>\n",
       "      <td>0.001786</td>\n",
       "      <td>0.976923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K16516</th>\n",
       "      <td>-0.508146</td>\n",
       "      <td>0.002154</td>\n",
       "      <td>0.976923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K09022</th>\n",
       "      <td>-0.495072</td>\n",
       "      <td>0.002913</td>\n",
       "      <td>0.976923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K13327</th>\n",
       "      <td>0.478900</td>\n",
       "      <td>0.004166</td>\n",
       "      <td>0.976923</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K18827 -0.518252  0.001691  0.976923\n",
       "K12994 -0.515988  0.001786  0.976923\n",
       "K16516 -0.508146  0.002154  0.976923\n",
       "K09022 -0.495072  0.002913  0.976923\n",
       "K13327  0.478900  0.004166  0.976923"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v6_DTAPHib_correlations = ko_abunds_v6.transpose().apply(spearmanr, b=meta_v6['median_mmNorm_DTAPHib']).transpose()\n",
    "v6_DTAPHib_correlations.columns = ['rho', 'p_value']\n",
    "v6_DTAPHib_correlations['p_adj'] = p_adjust(v6_DTAPHib_correlations['p_value'])\n",
    "v6_DTAPHib_correlations = v6_DTAPHib_correlations.sort_values('p_value')\n",
    "v6_DTAPHib_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "bfd793e7-1660-446a-819f-8eb303710698",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00802</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>4</td>\n",
       "      <td>2196</td>\n",
       "      <td>8.714286</td>\n",
       "      <td>0.133686</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00552</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>4</td>\n",
       "      <td>2196</td>\n",
       "      <td>8.714286</td>\n",
       "      <td>0.133686</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00019</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>5</td>\n",
       "      <td>2195</td>\n",
       "      <td>6.968254</td>\n",
       "      <td>0.158229</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00565</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>6</td>\n",
       "      <td>2194</td>\n",
       "      <td>5.804233</td>\n",
       "      <td>0.182088</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00166</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>6</td>\n",
       "      <td>2194</td>\n",
       "      <td>5.804233</td>\n",
       "      <td>0.182088</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00802            5      1      63       4     2196    8.714286  0.133686   \n",
       "M00552            5      1      63       4     2196    8.714286  0.133686   \n",
       "M00019            6      1      63       5     2195    6.968254  0.158229   \n",
       "M00565            7      1      63       6     2194    5.804233  0.182088   \n",
       "M00166            7      1      63       6     2194    5.804233  0.182088   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00802    1.0  \n",
       "M00552    1.0  \n",
       "M00019    1.0  \n",
       "M00565    1.0  \n",
       "M00166    1.0  "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v6_DTAPHib_sig_kos = set(v6_DTAPHib_correlations.query('p_value < .05').index)\n",
    "v6_DTAPHib_enrichment = measure_enrichment(v6_DTAPHib_sig_kos, modules, all_module_kos)\n",
    "v6_DTAPHib_enrichment.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "8bab49b6-00c1-43a0-ac0d-d173e3060c61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K02536</th>\n",
       "      <td>-0.478075</td>\n",
       "      <td>0.004241</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01039</th>\n",
       "      <td>0.471220</td>\n",
       "      <td>0.004908</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01758</th>\n",
       "      <td>0.454434</td>\n",
       "      <td>0.006936</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00899</th>\n",
       "      <td>0.442934</td>\n",
       "      <td>0.008706</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K05020</th>\n",
       "      <td>0.441378</td>\n",
       "      <td>0.008972</td>\n",
       "      <td>0.999316</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K02536 -0.478075  0.004241  0.999316\n",
       "K01039  0.471220  0.004908  0.999316\n",
       "K01758  0.454434  0.006936  0.999316\n",
       "K00899  0.442934  0.008706  0.999316\n",
       "K05020  0.441378  0.008972  0.999316"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meta_PCV_v6 = meta_PCV.query(\"VisitCode == 'V6'\")\n",
    "ko_abunds_PCV_v6 = ko_abunds_v6[meta_PCV_v6.index]\n",
    "ko_abunds_PCV_v6 = ko_abunds_PCV_v6.loc[(ko_abunds_PCV_v6 > 0).sum(axis=1) > ko_abunds_PCV_v6.shape[1]*.2]\n",
    "v6_PCV_correlations = ko_abunds_PCV_v6.transpose().apply(spearmanr, b=meta_PCV_v6['median_mmNorm_PCV']).transpose()\n",
    "v6_PCV_correlations.columns = ['rho', 'p_value']\n",
    "v6_PCV_correlations['p_adj'] = p_adjust(v6_PCV_correlations['p_value'])\n",
    "v6_PCV_correlations = v6_PCV_correlations.sort_values('p_value')\n",
    "v6_PCV_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "ef2c9bb4-3a74-4b7f-9616-840485cc4a0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00060</th>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>44</td>\n",
       "      <td>8</td>\n",
       "      <td>2191</td>\n",
       "      <td>12.448864</td>\n",
       "      <td>0.016650</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00122</th>\n",
       "      <td>10</td>\n",
       "      <td>2</td>\n",
       "      <td>44</td>\n",
       "      <td>8</td>\n",
       "      <td>2191</td>\n",
       "      <td>12.448864</td>\n",
       "      <td>0.016650</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00866</th>\n",
       "      <td>11</td>\n",
       "      <td>2</td>\n",
       "      <td>44</td>\n",
       "      <td>9</td>\n",
       "      <td>2190</td>\n",
       "      <td>11.060606</td>\n",
       "      <td>0.020087</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00573</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>45</td>\n",
       "      <td>4</td>\n",
       "      <td>2195</td>\n",
       "      <td>12.194444</td>\n",
       "      <td>0.098421</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00052</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>45</td>\n",
       "      <td>5</td>\n",
       "      <td>2194</td>\n",
       "      <td>9.751111</td>\n",
       "      <td>0.116935</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00060           10      2      44       8     2191   12.448864  0.016650   \n",
       "M00122           10      2      44       8     2191   12.448864  0.016650   \n",
       "M00866           11      2      44       9     2190   11.060606  0.020087   \n",
       "M00573            5      1      45       4     2195   12.194444  0.098421   \n",
       "M00052            6      1      45       5     2194    9.751111  0.116935   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00060    1.0  \n",
       "M00122    1.0  \n",
       "M00866    1.0  \n",
       "M00573    1.0  \n",
       "M00052    1.0  "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v6_PCV_sig_kos = set(v6_PCV_correlations.query('p_value < .05').index)\n",
    "v6_PCV_enrichment = measure_enrichment(v6_PCV_sig_kos, modules, all_module_kos)\n",
    "v6_PCV_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f852d2de-e4ff-442a-8b9b-27bfce749ffa",
   "metadata": {},
   "source": [
    "Nothing significant at 4 months."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff896259-3d19-4d86-b4ad-27230942c0c0",
   "metadata": {},
   "source": [
    "### 6 months"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "aa315037-5bfd-411a-955d-6e89b93940cf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K13287</th>\n",
       "      <td>0.523793</td>\n",
       "      <td>0.000738</td>\n",
       "      <td>0.955324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00868</th>\n",
       "      <td>-0.462523</td>\n",
       "      <td>0.003458</td>\n",
       "      <td>0.955324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K13285</th>\n",
       "      <td>0.454515</td>\n",
       "      <td>0.004148</td>\n",
       "      <td>0.955324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K02520</th>\n",
       "      <td>0.449612</td>\n",
       "      <td>0.004626</td>\n",
       "      <td>0.955324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K18986</th>\n",
       "      <td>0.430893</td>\n",
       "      <td>0.006919</td>\n",
       "      <td>0.955324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K13287  0.523793  0.000738  0.955324\n",
       "K00868 -0.462523  0.003458  0.955324\n",
       "K13285  0.454515  0.004148  0.955324\n",
       "K02520  0.449612  0.004626  0.955324\n",
       "K18986  0.430893  0.006919  0.955324"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v7_DTAPHib_correlations = ko_abunds_v7.transpose().apply(spearmanr, b=meta_v7['median_mmNorm_DTAPHib']).transpose()\n",
    "v7_DTAPHib_correlations.columns = ['rho', 'p_value']\n",
    "v7_DTAPHib_correlations['p_adj'] = p_adjust(v7_DTAPHib_correlations['p_value'])\n",
    "v7_DTAPHib_correlations = v7_DTAPHib_correlations.sort_values('p_value')\n",
    "v7_DTAPHib_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "1b7084af-8394-4441-a197-55a9716f1f57",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00609</th>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>34</td>\n",
       "      <td>4</td>\n",
       "      <td>2198</td>\n",
       "      <td>32.323529</td>\n",
       "      <td>0.003625</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00029</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>5</td>\n",
       "      <td>2197</td>\n",
       "      <td>12.554286</td>\n",
       "      <td>0.092815</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00157</th>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>7</td>\n",
       "      <td>2195</td>\n",
       "      <td>8.959184</td>\n",
       "      <td>0.121850</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00114</th>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>7</td>\n",
       "      <td>2195</td>\n",
       "      <td>8.959184</td>\n",
       "      <td>0.121850</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00307</th>\n",
       "      <td>12</td>\n",
       "      <td>1</td>\n",
       "      <td>35</td>\n",
       "      <td>11</td>\n",
       "      <td>2191</td>\n",
       "      <td>5.690909</td>\n",
       "      <td>0.177233</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00609            6      2      34       4     2198   32.323529  0.003625   \n",
       "M00029            6      1      35       5     2197   12.554286  0.092815   \n",
       "M00157            8      1      35       7     2195    8.959184  0.121850   \n",
       "M00114            8      1      35       7     2195    8.959184  0.121850   \n",
       "M00307           12      1      35      11     2191    5.690909  0.177233   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00609    1.0  \n",
       "M00029    1.0  \n",
       "M00157    1.0  \n",
       "M00114    1.0  \n",
       "M00307    1.0  "
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v7_DTAPHib_sig_kos = set(v7_DTAPHib_correlations.query('p_value < .05').index)\n",
    "v7_DTAPHib_enrichment = measure_enrichment(v7_DTAPHib_sig_kos, modules, all_module_kos)\n",
    "v7_DTAPHib_enrichment.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "3457d251-73b5-4571-8923-9514b5b6d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K21583</th>\n",
       "      <td>0.581614</td>\n",
       "      <td>0.000128</td>\n",
       "      <td>0.546544</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K16907</th>\n",
       "      <td>0.538195</td>\n",
       "      <td>0.000492</td>\n",
       "      <td>0.994105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K18640</th>\n",
       "      <td>-0.469442</td>\n",
       "      <td>0.002945</td>\n",
       "      <td>0.994105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K10672</th>\n",
       "      <td>0.447922</td>\n",
       "      <td>0.004802</td>\n",
       "      <td>0.994105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K21576</th>\n",
       "      <td>0.440459</td>\n",
       "      <td>0.005648</td>\n",
       "      <td>0.994105</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K21583  0.581614  0.000128  0.546544\n",
       "K16907  0.538195  0.000492  0.994105\n",
       "K18640 -0.469442  0.002945  0.994105\n",
       "K10672  0.447922  0.004802  0.994105\n",
       "K21576  0.440459  0.005648  0.994105"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meta_PCV_v7 = meta_PCV.query(\"VisitCode == 'V7'\")\n",
    "ko_abunds_PCV_v7 = ko_abunds_v7[meta_PCV_v7.index]\n",
    "ko_abunds_PCV_v7 = ko_abunds_PCV_v7.loc[(ko_abunds_PCV_v7 > 0).sum(axis=1) > ko_abunds_PCV_v7.shape[1]*.2]\n",
    "v7_PCV_correlations = ko_abunds_PCV_v7.transpose().apply(spearmanr, b=meta_PCV_v7['median_mmNorm_PCV']).transpose()\n",
    "v7_PCV_correlations.columns = ['rho', 'p_value']\n",
    "v7_PCV_correlations['p_adj'] = p_adjust(v7_PCV_correlations['p_value'])\n",
    "v7_PCV_correlations = v7_PCV_correlations.sort_values('p_value')\n",
    "v7_PCV_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "8a127806-22b3-48cf-ac8c-a3b8c2778589",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00552</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>54</td>\n",
       "      <td>4</td>\n",
       "      <td>2201</td>\n",
       "      <td>10.189815</td>\n",
       "      <td>0.115999</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00308</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>54</td>\n",
       "      <td>6</td>\n",
       "      <td>2199</td>\n",
       "      <td>6.787037</td>\n",
       "      <td>0.158604</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00166</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>54</td>\n",
       "      <td>6</td>\n",
       "      <td>2199</td>\n",
       "      <td>6.787037</td>\n",
       "      <td>0.158604</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00309</th>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>54</td>\n",
       "      <td>7</td>\n",
       "      <td>2198</td>\n",
       "      <td>5.814815</td>\n",
       "      <td>0.179144</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00878</th>\n",
       "      <td>11</td>\n",
       "      <td>1</td>\n",
       "      <td>54</td>\n",
       "      <td>10</td>\n",
       "      <td>2195</td>\n",
       "      <td>4.064815</td>\n",
       "      <td>0.237856</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00552            5      1      54       4     2201   10.189815  0.115999   \n",
       "M00308            7      1      54       6     2199    6.787037  0.158604   \n",
       "M00166            7      1      54       6     2199    6.787037  0.158604   \n",
       "M00309            8      1      54       7     2198    5.814815  0.179144   \n",
       "M00878           11      1      54      10     2195    4.064815  0.237856   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00552    1.0  \n",
       "M00308    1.0  \n",
       "M00166    1.0  \n",
       "M00309    1.0  \n",
       "M00878    1.0  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v7_PCV_sig_kos = set(v7_PCV_correlations.query('p_value < .05').index)\n",
    "v7_PCV_enrichment = measure_enrichment(v7_PCV_sig_kos, modules, all_module_kos)\n",
    "v7_PCV_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75401740-0e16-4bcb-bd88-22ed4e206673",
   "metadata": {},
   "source": [
    "Nothing significant at 6 months."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9d642e9-dcb8-4f19-a721-51aaa9aecbec",
   "metadata": {},
   "source": [
    "### 1 year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "4bda0450-61d3-4fc3-acaf-069e217eb985",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K06132</th>\n",
       "      <td>0.533665</td>\n",
       "      <td>0.000670</td>\n",
       "      <td>0.999881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K05305</th>\n",
       "      <td>0.506044</td>\n",
       "      <td>0.001396</td>\n",
       "      <td>0.999881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01166</th>\n",
       "      <td>-0.496930</td>\n",
       "      <td>0.001756</td>\n",
       "      <td>0.999881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01654</th>\n",
       "      <td>0.490150</td>\n",
       "      <td>0.002073</td>\n",
       "      <td>0.999881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00996</th>\n",
       "      <td>-0.478522</td>\n",
       "      <td>0.002736</td>\n",
       "      <td>0.999881</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K06132  0.533665  0.000670  0.999881\n",
       "K05305  0.506044  0.001396  0.999881\n",
       "K01166 -0.496930  0.001756  0.999881\n",
       "K01654  0.490150  0.002073  0.999881\n",
       "K00996 -0.478522  0.002736  0.999881"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v9_DTAPHib_correlations = ko_abunds_v9.transpose().apply(spearmanr, b=meta_v9['median_mmNorm_DTAPHib']).transpose()\n",
    "v9_DTAPHib_correlations.columns = ['rho', 'p_value']\n",
    "v9_DTAPHib_correlations['p_adj'] = p_adjust(v9_DTAPHib_correlations['p_value'])\n",
    "v9_DTAPHib_correlations = v9_DTAPHib_correlations.sort_values('p_value')\n",
    "v9_DTAPHib_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "a4638994-7f56-4062-a9ae-abed40402c18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00903</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>56</td>\n",
       "      <td>5</td>\n",
       "      <td>2199</td>\n",
       "      <td>7.853571</td>\n",
       "      <td>0.142189</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00529</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>56</td>\n",
       "      <td>9</td>\n",
       "      <td>2195</td>\n",
       "      <td>4.355159</td>\n",
       "      <td>0.225741</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00356</th>\n",
       "      <td>19</td>\n",
       "      <td>1</td>\n",
       "      <td>56</td>\n",
       "      <td>18</td>\n",
       "      <td>2186</td>\n",
       "      <td>2.168651</td>\n",
       "      <td>0.385594</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00034</th>\n",
       "      <td>19</td>\n",
       "      <td>1</td>\n",
       "      <td>56</td>\n",
       "      <td>18</td>\n",
       "      <td>2186</td>\n",
       "      <td>2.168651</td>\n",
       "      <td>0.385594</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00563</th>\n",
       "      <td>23</td>\n",
       "      <td>1</td>\n",
       "      <td>56</td>\n",
       "      <td>22</td>\n",
       "      <td>2182</td>\n",
       "      <td>1.771104</td>\n",
       "      <td>0.445772</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00903            6      1      56       5     2199    7.853571  0.142189   \n",
       "M00529           10      1      56       9     2195    4.355159  0.225741   \n",
       "M00356           19      1      56      18     2186    2.168651  0.385594   \n",
       "M00034           19      1      56      18     2186    2.168651  0.385594   \n",
       "M00563           23      1      56      22     2182    1.771104  0.445772   \n",
       "\n",
       "        p_adj  \n",
       "module         \n",
       "M00903    1.0  \n",
       "M00529    1.0  \n",
       "M00356    1.0  \n",
       "M00034    1.0  \n",
       "M00563    1.0  "
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v9_DTAPHib_sig_kos = set(v9_DTAPHib_correlations.query('p_value < .05').index)\n",
    "v9_DTAPHib_enrichment = measure_enrichment(v9_DTAPHib_sig_kos, modules, all_module_kos)\n",
    "v9_DTAPHib_enrichment.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "e5e92264-f448-4a6e-a984-ef9b4974f12f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>rho</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>K13626</th>\n",
       "      <td>0.533191</td>\n",
       "      <td>0.000679</td>\n",
       "      <td>0.993585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K15372</th>\n",
       "      <td>0.508061</td>\n",
       "      <td>0.001326</td>\n",
       "      <td>0.993585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K00655</th>\n",
       "      <td>0.484353</td>\n",
       "      <td>0.002384</td>\n",
       "      <td>0.993585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K16923</th>\n",
       "      <td>0.480085</td>\n",
       "      <td>0.002638</td>\n",
       "      <td>0.993585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K01661</th>\n",
       "      <td>-0.478189</td>\n",
       "      <td>0.002758</td>\n",
       "      <td>0.993585</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             rho   p_value     p_adj\n",
       "K13626  0.533191  0.000679  0.993585\n",
       "K15372  0.508061  0.001326  0.993585\n",
       "K00655  0.484353  0.002384  0.993585\n",
       "K16923  0.480085  0.002638  0.993585\n",
       "K01661 -0.478189  0.002758  0.993585"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "meta_PCV_v9 = meta_PCV.query(\"VisitCode == 'V9'\")\n",
    "ko_abunds_PCV_v9 = ko_abunds_v9[meta_PCV_v9.index]\n",
    "ko_abunds_PCV_v9 = ko_abunds_PCV_v9.loc[(ko_abunds_PCV_v9 > 0).sum(axis=1) > ko_abunds_PCV_v9.shape[1]*.2]\n",
    "v9_PCV_correlations = ko_abunds_PCV_v9.transpose().apply(spearmanr, b=meta_PCV_v9['median_mmNorm_PCV']).transpose()\n",
    "v9_PCV_correlations.columns = ['rho', 'p_value']\n",
    "v9_PCV_correlations['p_adj'] = p_adjust(v9_PCV_correlations['p_value'])\n",
    "v9_PCV_correlations = v9_PCV_correlations.sort_values('p_value')\n",
    "v9_PCV_correlations.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "a78aad68-45a3-4661-919f-0d657eae7173",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>module_size</th>\n",
       "      <th>in_in</th>\n",
       "      <th>in_out</th>\n",
       "      <th>out_in</th>\n",
       "      <th>out_out</th>\n",
       "      <th>odds_ratio</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>module</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M00616</th>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>139</td>\n",
       "      <td>2</td>\n",
       "      <td>2189</td>\n",
       "      <td>23.622302</td>\n",
       "      <td>0.002017</td>\n",
       "      <td>0.613227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00159</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>139</td>\n",
       "      <td>6</td>\n",
       "      <td>2185</td>\n",
       "      <td>7.859712</td>\n",
       "      <td>0.014136</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00358</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>141</td>\n",
       "      <td>4</td>\n",
       "      <td>2187</td>\n",
       "      <td>3.877660</td>\n",
       "      <td>0.269673</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00020</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>141</td>\n",
       "      <td>4</td>\n",
       "      <td>2187</td>\n",
       "      <td>3.877660</td>\n",
       "      <td>0.269673</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M00840</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>141</td>\n",
       "      <td>5</td>\n",
       "      <td>2186</td>\n",
       "      <td>3.100709</td>\n",
       "      <td>0.314220</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        module_size  in_in  in_out  out_in  out_out  odds_ratio   p_value  \\\n",
       "module                                                                      \n",
       "M00616            5      3     139       2     2189   23.622302  0.002017   \n",
       "M00159            9      3     139       6     2185    7.859712  0.014136   \n",
       "M00358            5      1     141       4     2187    3.877660  0.269673   \n",
       "M00020            5      1     141       4     2187    3.877660  0.269673   \n",
       "M00840            6      1     141       5     2186    3.100709  0.314220   \n",
       "\n",
       "           p_adj  \n",
       "module            \n",
       "M00616  0.613227  \n",
       "M00159  1.000000  \n",
       "M00358  1.000000  \n",
       "M00020  1.000000  \n",
       "M00840  1.000000  "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v9_PCV_sig_kos = set(v9_PCV_correlations.query('p_value < .05').index)\n",
    "v9_PCV_enrichment = measure_enrichment(v9_PCV_sig_kos, modules, all_module_kos)\n",
    "v9_PCV_enrichment.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f09a7ac-0d24-4ae0-85f5-67180f2dac8e",
   "metadata": {},
   "source": [
    "Nothing significant at 1 year."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "25c98eb8-1275-449e-8691-62560204f5e3",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
